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

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

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

  • 1 Главный Узел:
    • CPU: 2 процессора с 6 ядрами каждый = 12 ядер
    • ОЗУ: 64 ГБ
    • SSD: 2 x 512 ГБ
  • 5 Подчиненных Узлов:
    • CPU: 2 процессора с 6 ядрами каждый = 12 ядер
    • ОЗУ: 64 ГБ
    • HDD: 4 x 3 TB = 12 TB
  • HBase установлен (это один из параметров для сценария ниже)

поэтому я побежал python yarn-utils.py -c 12 -m 64 -d 4 -k True (C=ядра, M=память, D=жесткие диски, k=HBase-установлен) и получил следующий результат:

 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 и перезапустить кластер. Значения также примерно соответствуют тому, что я рассчитал вручную раньше.

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

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

тем не менее, я нашел этот пост что такое контейнер в пряжи?, но это не очень помогло, так как не описывает отношение к исполнителям.

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

1 ответов


я сообщу свои идеи здесь шаг за шагом:

  • Первое, что важно, это факт (источник:эта документация Cloudera):

    при запуске Spark on YARN каждый исполнитель Spark работает как контейнер для пряжи. [...]

  • это означает, что количество контейнеров всегда будет таким же, как исполнители, созданные приложением Spark, например, через в spark-submit.

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

  • наоборот, если параметр --executor-memory имеет значение somthing выше, чем yarn.scheduler.minimum-allocation-mb значением, например,12g, контейнер будет выделять больше памяти динамически, но!--38-->только если запрашиваемый объем памяти меньше или равен 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) позволяет определить больших исполнителей (при необходимости выделяется больше памяти, например, по