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

До сих пор я использовал 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 ]

0 голосов
/ 28 января 2019

Итак, я немного поэкспериментировал с кластером 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 Cluster допускает в общей сложности 64 ядра, а вы даете только 16 ядер для своей программы, другие задания Spark могут использовать оставшиеся 48 ядер.

0 голосов
/ 26 января 2019

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

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

  • Память: память исполнителя по отдельности

    - всего-исполнителей-ядер 12 --executor-cores 2 --executor-памяти 6G

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

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

    - память водителя 2G

...