2014-10-25 7 views
78

Как увеличить память, доступную для узлов-исполнителей Apache?Как установить память Apache Spark Executor

У меня есть файл размером 2 ГБ, подходящий для загрузки в Apache Spark. На данный момент я запускаю искру apache на 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. 

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

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

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

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

Я бег моего кода в интерактивном режиме с искровыми оболочками

ответ

127

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

  • установить его в свойствах файла (по умолчанию искровым defaults.conf),

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

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

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

Причина, по которой 265,4 МБ является то, что Spark dedicates spark.storage.memoryFraction * spark.storage.safetyFraction относится к общему объему памяти и по умолчанию составляет 0,6 и 0,9.

512 MB * 0.6 * 0.9 ~ 265.4 MB 

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

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

+0

выполняет ту же работу для pyspark оболочки? Потому что я попробовал './pyspark --master spark: // remus: 7077 --driver-memory 8g', а пользовательский интерфейс все еще показывает 512 M. – optimist

+0

@optimist вы используете кластер, поэтому здесь используйте память исполнителя! Или используйте master = local, чтобы иметь единственный узел (драйвер также будет исполнителем). –

29

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

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

Это запустит JVM с 2G вместо 512M по умолчанию.
Деталь here:

Для локального режима у вас есть только один исполнитель, и этот исполнитель является драйвером, поэтому вам необходимо установить память водителя вместо. * При этом в локальном режиме к моменту запуска spark-submit JVM уже был запущен с настройками памяти по умолчанию, поэтому установка «spark.driver.memory» в вашем conf фактически ничего не сделает для вас. Вместо этого вам необходимо запустить spark-submit следующим образом:

2

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

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

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

0

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

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

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

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" 
0

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

Screenshot

При увеличении [--driver-памяти 2G], исполнитель памяти получил увеличена до ~ 950Mb. enter image description here

0

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

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

Добавьте следующие параметры в искровом 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 
Смежные вопросы