2014-11-28 2 views
38

Я смущен о работе с памятью исполнителя и памятью водителя в Spark.Как справиться с памятью исполнителя и памятью драйвера в Spark?

настройки моего окружения, как показано ниже:

  • Память 128 G, 16 CPU для 9 VM
  • Centos
  • Hadoop 2.5.0-cdh5.2.0
  • Спарк 1.1.0

Информация о входных данных:

  • 3,5 Гб файл данных от HDFS

Для простого развития, я выполнил мой код Python в режиме автономного кластера (8 рабочих, 20 ядер, 45,3 G памяти) с spark-submit. Теперь я хотел бы установить память исполнителей или память драйвера для настройки производительности.

Spark documentation С, определение для исполнителя памяти

Объем памяти для использования в процессе исполнителю, в том же формате, что и строки памяти виртуальной машины Java (например, 512m, 2 г).

Как насчет памяти водителя?

ответ

70

Память, которую необходимо назначить водителю, зависит от задания.

Если работа основана исключительно на преобразованиях и заканчивается на некотором распределенном выходном воздействии, как rdd.saveAsTextFile, rdd.saveToCassandra, ... то потребность памяти водителя будет очень низкой. Немногие 100 MB будут делать. Драйвер также отвечает за доставку файлов и сбор показателей, но не участвует в обработке данных.

Если задание требуется, чтобы водитель участвовал в вычислении, например, некоторый ML algo, который должен материализовать результаты и транслировать их на следующей итерации, тогда ваша работа будет зависеть от количества данных, проходящих через драйвер. Операции, такие как .collect, .take и takeSample, передают данные драйверу и, следовательно, драйверу требуется достаточно памяти для распределения таких данных.

например. Если у вас есть rdd из 3 ГБ в кластере и звоните val myresultArray = rdd.collect, вам понадобится 3 ГБ памяти в драйвере для хранения этих данных плюс дополнительная комната для функций, упомянутых в первом абзаце.

4

В приложении Spark Драйвер отвечает за планирование задач, а Исполнитель отвечает за выполнение конкретных задач в вашей работе.

Если вы знакомы с MapReduce, ваши карты задачи & уменьшающие задачи все выполняются в Исполнителю (в Спарк, они называются ShuffleMapTasks & ResultTasks), а также, независимо от РДД вы хотите кэшировать также в куче исполнителя JVM в & диск.

Итак, я думаю, что несколько ГБ будут в порядке для вашего драйвера.

Смежные вопросы