Диспетчер ресурсов Spark в YARN: связь между контейнерами YARN и исполнителями Spark

Я новичок в Spark on YARN и не понимаю связи между YARN Containers и Spark Executors. На основе результатов сценария yarn-utils.py я опробовал следующую конфигурацию, которую можно использовать для поиска оптимальной конфигурации кластера.

Кластер Hadoop (HDP 2.4), над которым я работаю:

  • 1 Master Node:
    • CPU: 2 CPUs with 6 cores each = 12 cores
    • Оперативная память: 64 ГБ
    • SSD: 2 x 512 ГБ
  • 5 Slave Nodes:
    • CPU: 2 CPUs with 6 cores each = 12 cores
    • Оперативная память: 64 ГБ
    • HDD: 4 x 3 ТБ = 12 ТБ
  • HBase установлен (это один из параметров скрипта ниже)

Итак, я запустил python yarn-utils.py -c 12 -m 64 -d 4 -k True (c = ядра, m = память, d = hdds, k = hbase-installed) и получил следующий результат:

 Using cores=12 memory=64GB disks=4 hbase=True
 Profile: cores=12 memory=49152MB reserved=16GB usableMem=48GB disks=4
 Num Container=8
 Container Ram=6144MB
 Used Ram=48GB
 Unused Ram=16GB
 yarn.scheduler.minimum-allocation-mb=6144
 yarn.scheduler.maximum-allocation-mb=49152
 yarn.nodemanager.resource.memory-mb=49152
 mapreduce.map.memory.mb=6144
 mapreduce.map.java.opts=-Xmx4915m
 mapreduce.reduce.memory.mb=6144
 mapreduce.reduce.java.opts=-Xmx4915m
 yarn.app.mapreduce.am.resource.mb=6144
 yarn.app.mapreduce.am.command-opts=-Xmx4915m
 mapreduce.task.io.sort.mb=2457

Эти настройки я сделал через интерфейс Ambari и перезапустил кластер. Значения также примерно соответствуют тому, что я вычислял вручную ранее.

У меня сейчас проблемы

  • to find the optimal settings for my spark-submit script
    • parameters --num-executors, --executor-cores & --executor-memory.
  • чтобы получить связь между контейнером YARN и исполнителями Spark
  • чтобы понять информацию об оборудовании в моем пользовательском интерфейсе истории Spark (меньше памяти показано, как я установил (при расчете на общую память путем умножения на количество рабочих узлов))
  • чтобы понять концепцию vcores в YARN, здесь я пока не смог найти никаких полезных примеров

Однако я нашел этот пост Что такое контейнер в YARN?, но это не особо помог, так как не описывает отношения к исполнителям.

Может кто-нибудь помочь решить один или несколько вопросов?


person D. Müller    schedule 12.07.2016    source источник


Ответы (1)


Я расскажу о своих выводах здесь шаг за шагом:

  • # P2 #
    # P3 #
  • Это означает, что количество контейнеров всегда будет таким же, как у исполнителей, созданных приложением Spark, например. через параметр --num-executors в spark-submit.

  • Устанавливается yarn.scheduler.minimum-allocation-mb каждый контейнер всегда выделяет как минимум этот объем памяти. Это означает, что если параметр --executor-memory установлен, например, только 1g, но yarn.scheduler.minimum-allocation-mb, например 6g, контейнер намного больше, чем требуется приложению Spark.

  • И наоборот, если параметр --executor-memory установлен на что-то большее, чем значение yarn.scheduler.minimum-allocation-mb, например 12g, Контейнер будет выделять больше памяти динамически, но только если запрошенный объем памяти меньше или равен значению yarn.scheduler.maximum-allocation-mb.

  • Значение yarn.nodemanager.resource.memory-mb определяет, сколько памяти может быть выделено в сумме всеми контейнерами одного хоста!

= › Таким образом, настройка yarn.scheduler.minimum-allocation-mb позволяет запускать контейнеры меньшего размера, например для более мелких исполнителей (иначе это было бы пустой тратой памяти).

= › Установка для yarn.scheduler.maximum-allocation-mb максимального значения (например, равного yarn.nodemanager.resource.memory-mb) позволяет вам определять более крупные исполнители (при необходимости выделяется больше памяти, например, с помощью параметра --executor-memory).

person D. Müller    schedule 13.07.2016
comment
мы должны установить / изменить yarn.nodemanager.resource.memory-mb на каждом узле кластера? - person desaiankitb; 31.07.2018