Как установить Apache Spark Executor memory


как я могу увеличить память, доступную для узлов Apache spark executor?

у меня есть 2 ГБ файл, который подходит для загрузки в Apache Spark. Я запускаю apache spark на данный момент на 1 машине, поэтому драйвер и исполнитель находятся на одной машине. Машина имеет 8 ГБ памяти.

когда я пытаюсь подсчитать строки файла После выбора файла для кэширования в памяти, я получаю эти ошибки:

2014-10-25 22:25:12 WARN  CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.

Я посмотрел на документацию здесь и set spark.executor.memory to 4g на $SPARK_HOME/conf/spark-defaults.conf

пользовательский интерфейс показывает, что эта переменная установлена в среде Spark. Вы можете найти скриншот здесь

однако, когда я иду в исполнитель ограничение памяти для моего единственного исполнителя по-прежнему установлено на 265,4 МБ. Я также все еще получаю ту же ошибку.

Я пробовал различные вещи, упомянутые здесь, но я все еще получаю ошибку и не имею четкого представления, где я должен изменить установочный.

Я запускаю свой код в интерактивном режиме из spark-shell

7 94

7 ответов:

так как вы запускаете Spark в локальном режиме, установка spark.executor.memory не будет иметь никакого эффекта, как вы заметили. Причина этого заключается в том, что рабочий "живет" в процессе JVM драйвера, который вы запускаете при запуске spark-shell память по умолчанию используется для это 512 МБ. Вы можете увеличить это, установив spark.driver.memory к чему-то высокому, например 5g. Вы можете сделать это либо:

  • настройки в файл свойств (по умолчанию-spark-defaults.conf),

    spark.driver.memory              5g
    
  • или путем предоставления параметров конфигурации во время выполнения

    $ ./bin/spark-shell --driver-memory 5g
    

обратите внимание, что это не может быть достигнуто путем установки его в приложении, потому что это уже слишком поздно, процесс уже начался с некоторым количеством памяти.

причина 265.4 MB заключается в том, что Искра посвящает искры.место хранения.memoryFraction * искра.место хранения.safetyFraction к общему объему памяти хранения и по умолчанию они 0,6 и 0,9.

512 MB * 0.6 * 0.9 ~ 265.4 MB

поэтому имейте в виду, что не весь объем памяти драйвера будет доступен для хранения RDD.

но когда вы начнете запускать это в кластере,spark.executor.memory установка возьмет на себя при расчете суммы, чтобы выделить в кэш памяти Spark.

также обратите внимание, что для локального режима вы должны установить объем памяти драйвера перед запуском jvm:

bin/spark-submit --driver-memory 2g --class your.class.here app.jar

это запустит JVM с 2G вместо 512m по умолчанию.
Подробности здесь:

для локального режима у вас есть только один исполнитель, и этот исполнитель является вашим драйвером, поэтому вам нужно установить память драйвера. *Тем не менее, в локальном режиме, к моменту запуска spark-submit, JVM уже был запущен по умолчанию настройки памяти, поэтому настройка " Искра.водитель.память " в вашей конфе на самом деле ничего не сделает для вас. Вместо этого вам нужно запустить spark-submit следующим образом

видимо, вопрос никогда не говорит, чтобы работать в локальном режиме не на пряжу. Почему-то я не мог получить spark-default.конф изменить на работу. Вместо этого я попробовал это, и это сработало для меня

bin/spark-shell --master yarn --num-executors 6  --driver-memory 5g --executor-memory 7g

(не может поднять executor-память до 8g есть некоторые ограничения от конфигурации пряжи.)

вам нужно увеличить память драйвер.На mac (т. е. при запуске на локальном мастере), драйвер по умолчанию-память 1024M). По умолчанию, таким образом, исполнителю выделяется 380 Мб.

Screenshot

при увеличении [--драйвер-память 2G], память исполнителя была увеличена до ~950 МБ. enter image description here

создать файл с именем spark-env.sh в каталоге spark/conf и добавьте эту строку

SPARK_EXECUTOR_MEMORY=2000m #memory size which you want to allocate for the executor

вы можете построить команду, используя следующий пример

 spark-submit    --jars /usr/share/java/postgresql-jdbc.jar    --class com.examples.WordCount3  /home/vaquarkhan/spark-scala-maven-project-0.0.1-SNAPSHOT.jar --jar  --num-executors 3 --driver-memory 10g **--executor-memory 10g** --executor-cores 1  --master local --deploy-mode client  --name wordcount3 --conf "spark.app.id=wordcount" 

память Spark executor требуется для выполнения ваших задач spark на основе инструкций, предоставленных вашей программой драйвера. В принципе, это требует больше ресурсов, которые зависят от вашего представленного задания.

память исполнителя включает в себя память, необходимую для выполнения задач, а также служебную память, которая не должна превышать размер JVM и максимальный размер контейнера yarn.

добавьте следующие параметры в spark-defaults.conf

spar.executor.cores=1

spark.executor.memory=2g

Если вы используете любые инструменты управления кластером, такие как менеджер cloudera или amabari пожалуйста, обновите конфигурацию кластера для отражения последних конфигураций для всех узлов в кластере.

кроме того, мы можем передать исполнителю ядро и значение памяти в качестве аргумента во время работы spark-submit команда вместе с классом и пути приложения.

пример:

spark-submit \

  --class org.apache.spark.examples.SparkPi \

  --master yarn \

  --deploy-mode cluster \  # can be client for client mode

  --executor-memory 2G \

  --num-executors 5 \

  /path/to/examples.jar \

  1000