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