Spark игнорирует SPARK_WORKER_MEMORY?
Я использую автономный режим кластера, 1.5.2.
Даже если я устанавливаю SPARK_WORKER_MEMORY
в spark-env.sh
, похоже, что этот параметр игнорируется.
Я не могу найти никаких указаний в сценариях под bin/sbin
, которые установлены -Xms/-Xmx
.
Если я использую команду ps
для рабочего pid
, это выглядит как память, установленная на 1G
:
[[email protected] spark-1.5.2-bin-hadoop2.6]$ ps -ef | grep 20232
hadoop 20232 1 0 02:01 ? 00:00:22 /usr/java/latest//bin/java
-cp /workspace/3rd-party/spark/spark-1.5.2-bin-hadoop2.6/sbin/../conf/:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/spark-assembly-1.5.2-hadoop2.6.0.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-api-jdo-3.2.6.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar:/workspace/
3rd-party/spark/spark-1.5.2-bin-hadoop2.6/lib/datanucleus-core-3.2.10.jar:/workspace/
3rd-party/hadoop/2.6.3//etc/hadoop/ -Xms1g -Xmx1g org.apache.spark.deploy.worker.Worker
--webui-port 8081 spark://10.52.39.92:7077
искровым defaults.conf:
spark.master spark://10.52.39.92:7077
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.executor.memory 2g
spark.executor.cores 1
spark-env.sh:
export SPARK_MASTER_IP=10.52.39.92
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=12g
Я что-то пропустил?
Спасибо.
Ответы
Ответ 1
Это моя конфигурация в режиме кластера, на spark-default.conf
spark.driver.memory 5g
spark.executor.memory 6g
spark.executor.cores 4
У вас было что-то вроде этого?
Если вы не добавите этот код (с вашими параметрами), исполнитель Spark получит по умолчанию 1 гб Ram.
В противном случае вы можете добавить эти параметры. /spark-submit
следующим образом:
# Run on a YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \ # can be client for client mode
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
Попробуйте проверить master (ip/name of master): 8080 при запуске приложения, если ресурсы были правильно распределены.
Ответ 2
При использовании искровой оболочки или искрообразования используйте параметр --executor-memory
.
При настройке его для автономной банки задайте системное свойство программно, прежде чем создавать контекст искры.
System.setProperty("spark.executor.memory", executorMemory)
Ответ 3
В режиме кластера используется неправильная настройка.
SPARK_EXECUTOR_MEMORY - это правильная опция для установки памяти Executor в режиме кластера.
SPARK_WORKER_MEMORY работает только в автономном режиме развертывания.
В других случаях для установки памяти исполнителя из командной строки: -Dspark.executor.memory=2g
У вас есть еще один связанный вопрос SE относительно этих настроек:
Конфигурация искры, какая разница между SPARK_DRIVER_MEMORY, SPARK_EXECUTOR_MEMORY и SPARK_WORKER_MEMORY?
Ответ 4
Я столкнулся с той же проблемой, что и ваша. Причина в том, что в автономном режиме spark.executor.memory
фактически игнорируется. Что имеет эффект spark.driver.memory
, потому что исполнитель живет в драйвере.
Итак, вы можете установить spark.driver.memory
как можно выше.
Вот где я нашел объяснение:
Как установить память Apache Spark Executor