Как распределить больше исполнителей на одного работника в режиме автономного кластера?
Я использую Spark 1.3.0 в кластере из 5 рабочих узлов с 36 ядрами и 58 ГБ памяти каждый. Я хотел бы настроить кластер Spark Standalone со многими исполнителями на одного рабочего.
Я видел объединенный SPARK-1706, однако сразу не ясно, как на самом деле настроить несколько исполнителей.
Вот последняя конфигурация кластера:
spark.executor.cores = "15"
spark.executor.instances = "10"
spark.executor.memory = "10g"
Эти настройки устанавливаются на SparkContext
, когда приложение Spark отправляется в кластер.
Ответы
Ответ 1
Сначала вам нужно настроить свой искровой автономный кластер, а затем установить объем ресурсов, необходимых для каждого отдельного искрового приложения, которое вы хотите запустить.
Чтобы настроить кластер, вы можете попробовать следующее:
Поскольку у вас есть 5 рабочих, с указанной конфигурацией вы должны увидеть 5 (рабочих) * 10 (исполнителей на одного работника) = 50 живых исполнителей на главном веб-интерфейсе (http://localhost:8080 по умолчанию)
При запуске приложения в автономном режиме по умолчанию он будет приобретать все доступные исполнители в кластере. Вам нужно явно указать количество ресурсов для запуска этого приложения:
Например:
val conf = new SparkConf()
.setMaster(...)
.setAppName(...)
.set("spark.executor.memory", "2g")
.set("spark.cores.max", "10")
Ответ 2
Начиная с Spark 1.4, это можно настроить следующим образом:
Настройка: spark.executor.cores
По умолчанию: 1 в режиме YARN, все доступные ядра для рабочего в автономном режиме.
Описание: количество ядер, используемых для каждого исполнителя. Только для YARN и автономного режима. В автономном режиме установка этого параметра позволяет приложению запускать несколько исполнителей на одного и того же работника при условии, что для этого рабочего достаточно ядер. В противном случае на каждого работника будет выполняться только один исполнитель для каждого приложения.
http://spark.apache.org/docs/1.4.0/configuration.html#execution-behavior
Ответ 3
До сих пор Развертывание автономного кластера Apache Spark 2.2 не разрешает проблему количества ИСПОЛНИТЕЛЕЙ на WORKER, но есть альтернатива для этого: запуск Искры-исполнители вручную:
[[email protected] ~spark/bin]# ./spark-class org.apache.spark.executor.CoarseGrainedExecutorBackend --driver-url spark://[email protected]:PORT --executor-id val --hostname localhost-val --cores 41 --app-id app-20170914105902-0000-just-exemple --worker-url spark://[email protected]:34117
Я надеюсь, что вам помогут!
Ответ 4
В автономном режиме по умолчанию все ресурсы кластера приобретаются при запуске приложения. Вам нужно указать количество исполнителей, которые вам нужны, с помощью конфигураций --executor-cores
и --total-executor-cores
.
Например, если в вашем кластере есть 1 рабочий (1 рабочий == 1 компьютер, в вашей кластере - хорошая работа, у вас есть только 1 сотрудник на машину), у которого в пуле есть 3 ядра и 3G (это указанный в spark-env.sh), когда вы отправляете приложение с --executor-cores 1 --total-executor-cores 2 --executor-memory 1g
, два запуска запускаются для приложения с 1 ядром и 1g каждый. Надеюсь, это поможет!