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) позволяет определить больших исполнителей (при необходимости выделяется больше памяти, например, по 
