Как увеличить объем памяти, доступной для узлов исполнителя Apache Spark?
У меня есть файл размером 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.
Я посмотрел на документацию здесь и установить spark.executor.memory
на 4g
в$SPARK_HOME/conf/spark-defaults.conf
Пользовательский интерфейс показывает, что эта переменная установлена в среде Spark. Вы можете найти скриншот здесь
Однако, когда я перехожу на вкладку Executor, предел памяти для моего единственного Executor по-прежнему установлен на 265,4 МБ. Я тоже получаю ту же ошибку.
Я пробовал разные вещи, упомянутые здесь, но все равно получаю сообщение об ошибке и не имею четкого представления, где мне изменить настройку.
Я запускаю свой код в интерактивном режиме из искровой оболочки
источник
Также обратите внимание, что для локального режима вы должны установить объем памяти драйвера перед запуском jvm:
Это запустит JVM с 2G вместо 512M по умолчанию.
Подробности здесь :
источник
По-видимому, вопрос никогда не говорит о том, что нужно запускать локальный режим, а не пряжу. Как-то я не мог заставить работать изменение spark-default.conf. Вместо этого я попробовал это, и это сработало для меня
(не удалось увеличить память исполнителя до 8g, есть некоторые ограничения конфигурации пряжи.)
источник
executor-memory
выше чемdriver-memory
?Ответ, представленный Грегой, помог мне решить мою проблему. Я запускаю Spark локально из скрипта python внутри контейнера Docker. Первоначально у меня возникала ошибка нехватки памяти Java при обработке некоторых данных в Spark. Однако я смог выделить больше памяти, добавив в свой скрипт следующую строку:
Вот полный пример скрипта python, который я использую для запуска Spark:
источник
Вам необходимо увеличить память драйвера. На Mac (т.е. при работе на локальном мастере) память драйвера по умолчанию составляет 1024M. По умолчанию исполнителю отводится 380 МБ.
При увеличении [ --driver-memory 2G ] объем памяти исполнителя увеличился до ~ 950 МБ.
источник
создайте файл с именем spark-env.sh в каталоге spark / conf и добавьте эту строку
источник
SPARK_WORKER_MEMORY
.Вы можете создать команду, используя следующий пример
источник
Память исполнителя Spark требуется для выполнения ваших задач Spark на основе инструкций, предоставленных вашей программой драйвера. По сути, для этого требуется больше ресурсов, что зависит от присланной вами работы.
Память исполнителя включает в себя память, необходимую для выполнения задач, плюс служебную память, которая не должна быть больше размера JVM и максимального размера контейнера.
Добавьте следующие параметры в spark-defaults.conf
Если вы используете какие-либо инструменты управления кластером, такие как cloudera manager или amabari, обновите конфигурацию кластера, чтобы отразить последние конфигурации для всех узлов в кластере.
В качестве альтернативы мы можем передать ядро исполнителя и значение памяти в качестве аргумента во время выполнения
spark-submit
команды вместе с классом и путем приложения.Пример:
источник
вы упомянули, что вы запускаете свой код в интерактивном режиме в искровой оболочке, поэтому, если при этом не установлено правильное значение для памяти драйвера или памяти исполнителя, то искра по умолчанию присваивает ему какое-то значение, которое основано на его файле свойств (где значение по умолчанию упоминается).
Надеюсь, вы знаете, что существует один драйвер (главный узел) и рабочий узел (где создаются и обрабатываются исполнители), поэтому в основном программе Spark требуется два типа пространства, поэтому, если вы хотите установить память драйвера тогда при запуске искр-оболочки.
spark-shell --driver-memory "ваше значение" и для установки памяти исполнителя: spark-shell --executor-memory "ваше значение"
тогда я думаю, что вы можете использовать желаемое значение памяти, которое вы хотите, чтобы ваша искровая оболочка использовала.
источник
источник
В Windows или Linux вы можете использовать эту команду:
источник
Насколько я знаю, во время
spark.executor.memory
выполнения изменить невозможно . Если вы используете автономную версию с pyspark и graphframes, вы можете запустить pysparkREPL
, выполнив следующую команду:Обязательно измените
SPARK_VERSION
переменную среды соответствующим образом для последней выпущенной версии Spark.источник