Подтвердить что ты не робот

Как работать с памятью исполнителей и памятью драйвера в 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 Г памяти) с помощью spark-submit. Теперь я хотел бы установить память исполнителей или память драйвера для настройки производительности.

Из документации Spark определение для памяти исполнителя

Объем памяти для каждого процесса-исполнителя в том же формате, что и строки памяти JVM (например, 512 м, 2 г).

Как насчет памяти драйвера?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Если вы знакомы с MapReduce, ваши задачи по карте и задачи уменьшаются, все исполняются в Executor (в Spark они называются ShuffleMapTasks и ResultTasks), а также независимо от того, какой RDD вы хотите кэшировать, также в куче JVM-исполнителя и на диске.

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