Как установить 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 ответов:
так как вы запускаете 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 есть некоторые ограничения от конфигурации пряжи.)
создать файл с именем 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