Как управлять несколькими исполнителями на рабочих узлах с помощью автономного кластера Spark?

До сих пор я использовал Spark только в кластере Hadoop с YARN в качестве менеджера ресурсов. В этом типе кластера я точно знаю, сколько исполнителей нужно запустить и как работает управление ресурсами. Однако, знайте, что я пытаюсь использовать Автономный кластер искр, я немного запутался. Поправь меня, где я не прав.

Из этой статьи по умолчанию рабочий узел использует всю память узла минус 1 ГБ. Но я понимаю, что с помощью SPARK_WORKER_MEMORYмы можем использовать меньше памяти. Например, если общий объем памяти узла составляет 32 ГБ, но я указываю 16 ГБ, Spark worker не будет использовать больше 16 ГБ на этом узле?

Но как насчет исполнителей? Скажем, если я хочу запустить 2 исполнителя на узел, могу ли я сделать это, указав память исполнителя во время spark-submit быть половиной SPARK_WORKER_MEMORYи, если я хочу запустить 4 исполнителя на узел, указав память исполнителя на четверть SPARK_WORKER_MEMORY?

Если так, то кроме памяти исполнителя, я думаю, мне бы также пришлось правильно указывать ядра исполнителя. Например, если я хочу запустить 4 исполнителя на одном работнике, мне нужно будет указать ядра исполнителей на четверть SPARK_WORKER_CORES? Что произойдет, если я укажу большее число, чем это? Я имею в виду, если я укажу память исполнителя на четверть SPARK_WORKER_MEMORY, но исполнителю ядра будет только половина SPARK_WORKER_CORES? Получу ли я в этом случае 2 или 4 исполнителя на этом узле?

2 ответа

Решение

Итак, я немного экспериментировал с кластером Spark Standalone, и это то, что я заметил.

  1. Моя интуиция о том, что несколько исполнителей могут быть запущены внутри рабочего, настраивая ядра исполнителей, была действительно правильной. Допустим, у вашего работника 16 ядер. Теперь, если вы укажете 8 ядер для исполнителей, Spark будет запускать 2 исполнителя на одного работника.

  2. Сколько исполнителей выполняется внутри рабочего, также зависит от памяти исполнителя, которую вы укажете. Например, если рабочая память составляет 24 ГБ, и вы хотите запустить 2 исполнителя на одного рабочего, вы не можете указать память исполнителя более 12 ГБ.

  3. Память рабочего может быть ограничена при запуске ведомого устройства путем указания значения для необязательного параметра--memory или путем изменения значения SPARK_WORKER_MEMORY, То же с количеством ядер (--cores/SPARK_WORKER_CORES).

Если вы хотите иметь возможность запускать несколько заданий в автономном кластере Spark, вы можете использовать spark.cores.max свойство конфигурации при выполнении spark-submit, Например, вот так.

spark-submit <other parameters> --conf="spark.cores.max=16" <other parameters>

Таким образом, если ваш автономный кластер Spark допускает в общей сложности 64 ядра, а вы предоставляете только 16 ядер для своей программы, другие задания Spark могут использовать оставшиеся 48 ядер.

Это лучший способ контролировать количество исполнителей, ядер и памяти в моем опыте.

  • Вы можете установить общее количество ядер для всех исполнителей и количество ядер для каждого исполнителя, вы можете установить память исполнителя

    --total-executor-cores 12 --executor-cores 2 --executor-memory 6G

    Это даст вам 6 исполнителей и 2 ядра /6G на каждого исполнителя, так что в целом вы смотрите на 12 ядер и 36G

  • Вы можете установить память драйвера, используя

    - драйвер памяти 2G

Другие вопросы по тегам