Spark на Dataproc: возможно ли запустить больше исполнителей на процессор? - PullRequest
0 голосов
/ 11 мая 2018

Я использую Spark 1.6.2 в Google Cloud Dataproc (поэтому Dataproc версия 1.0). Мой кластер состоит из нескольких n1-standard-8 рабочих, и я использую по одному исполнителю на ядро ​​(spark.executor.cores=1).

Я вижу, что общая загрузка ЦП никогда не превышает 50%, даже если на каждого работника установлено правильное количество исполнителей (я оставляю одно ядро ​​на каждого работника для ОС и т. Д.).

Мне интересно, можно ли вообще как-то запустить больше исполнителей на каждом работнике, чтобы использовать кластер более полно? Если да, какие настройки мне нужно указать?

Дамп lscpu на рабочих машинах выглядит следующим образом:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU @ 2.50GHz
Stepping:              4
CPU MHz:               2500.000
BogoMIPS:              5000.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0-7

Спасибо за любые предложения!

1 Ответ

0 голосов
/ 16 мая 2018

По умолчанию YARN планирует только контейнеры (в данном случае искры-исполнители), основываясь на памяти, а не на количестве запрашиваемых ядер. Dataproc устанавливает память исполнителя так, чтобы на каждый узел приходилось 2 исполнителя.

spark.executor.cores по существу игнорируется в контексте YARN, но - это , используемый для определения количества параллельных задач. Если вы уменьшаете spark.executor.cores, но не память исполнителя, вы фактически уменьшаете параллелизм!

Вместо этого вы должны оставить память исполнителя и увеличить spark.executor.cores. На n1-standard-4 вы сможете без проблем повысить spark.executor.cores с 2 до 4.

Если вы попытаетесь установить spark.executor.cores выше, чем число YARN vcores на узле, Spark будет жаловаться. Вы можете исправить это, установив yarn.nodemanager.resource.cpu-vcores=<large-number>. Тогда <large-number> будет новой верхней границей.

В зависимости от того, насколько ограничен ввод / вывод для вашей работы, вы можете легко удвоить или увеличить в четыре раза spark.executor.cores, если не больше. Запись файлов в GCS обычно связана с вводом / выводом.

Обратите внимание, что, хотя вы можете указать свойства spark при запуске задания spark, вы сможете указать это свойство YARN только при создании кластера:

...