Я пытаюсь максимизировать использование кластера для простой задачи.
Кластер 1 + 2 x m3.xlarge, runnning Spark 1.3.1, Hadoop 2.4, Amazon AMI 3.7
Задача считывает все строки текстового файла и анализирует их как csv.
Когда я запускаю задачу в качестве режима нитевого кластера, я получаю один из следующих результатов:
- 0 executor: работа ждет бесконечно, пока я не рунет ее вручную.
- 1 исполнитель: работа по использованию ресурсов только с 1 машинной работой.
- OOM, когда я не назначаю достаточно памяти на драйвер
Что я ожидал бы:
- Драйвер Spark запускается на главном кластере со всей доступной памятью, плюс 2 исполнителя с 9404 МБ каждый (как определено установкой-искры script).
Иногда, когда я получаю "успешное" выполнение с 1 исполнителем, клонирование и перезапуск этапа заканчиваются 0-исполнителем.
Я создал кластер с помощью этой команды:
aws emr --region us-east-1 create-cluster --name "Spark Test"
--ec2-attributes KeyName=mykey
--ami-version 3.7.0
--use-default-roles
--instance-type m3.xlarge
--instance-count 3
--log-uri s3://mybucket/logs/
--bootstrap-actions Path=s3://support.elasticmapreduce/spark/install-spark,Args=["-x"]
--steps Name=Sample,Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar,Args=[/home/hadoop/spark/bin/spark-submit,--master,yarn,--deploy-mode,cluster,--class,my.sample.spark.Sample,s3://mybucket/test/sample_2.10-1.0.0-SNAPSHOT-shaded.jar,s3://mybucket/data/],ActionOnFailure=CONTINUE
С некоторыми изменениями шага, включая:
- память-драйвер 8G -driver-core 4 --num-executors 2
install-spark script с -x создает следующий spark-defaults.conf:
$ cat spark-defaults.conf
spark.eventLog.enabled false
spark.executor.extraJavaOptions -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxHeapFreeRatio=70
spark.driver.extraJavaOptions -Dspark.driver.log.level=INFO
spark.executor.instances 2
spark.executor.cores 4
spark.executor.memory 9404M
spark.default.parallelism 8
Обновление 1
Я получаю такое же поведение с примером JavaWordCount:
/home/hadoop/spark/bin/spark-submit --verbose --master yarn --deploy-mode cluster --driver-memory 8G --class org.apache.spark.examples.JavaWordCount /home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar s3://mybucket/data/
Однако, если я удалю '-driver-memory 8G', задача получит 2 исполнителя и завершится правильно.
Итак, что случилось с драйвером-памятью, препятствующим моей задаче получить исполнителей?
Если драйвер должен выполняться на главном кластере node вместе с контейнером мастерства пряжи, как описано здесь?
Как я могу предоставить больше памяти моему драйверу искры? (Где собираются и какие-то другие полезные операции)