У меня есть Hadoop-кластер с 5 узлами, каждый из которых имеет 12 ядер с памятью 32 ГБ. Я использую YARN как карту MapReduce, поэтому у меня есть следующие настройки с YARN:
- yarn.nodemanager.resource.cpu-vcores = 10
- yarn.nodemanager.resource.memory-MB = 26100
Затем метрики кластера, показанные на моей странице кластера YARN (http://myhost:8088/cluster/apps), показали, что VCores Total - 40 б > . Это очень хорошо!
Затем я установил Spark поверх него и использовал искровую оболочку в режиме нити-клиента.
Я выполнил одно задание Spark со следующей конфигурацией:
- - память-драйвер 20480m
- - память исполнителя 20000m
- - num-executors 4
- - ядра-исполнители 10
- - conf spark.yarn.am.cores = 2
- - conf spark.yarn.executor.memoryOverhead = 5600
Я устанавливаю - executor-core как 10, - num-executors как 4, поэтому логически, должно быть полностью 40 используемых Vcores. Однако, когда я проверяю одну и ту же страницу кластера YARN после запуска задания Spark, есть только 4 используемых Vcores и 4 Vcores Total
Я также нашел, что есть параметр в capacity-scheduler.xml
- под названием yarn.scheduler.capacity.resource-calculator
:
"Реализация ResourceCalculator, которая будет использоваться для сравнения ресурсов в планировщике. Значение по умолчанию, равное по умолчаниюResourceCalculator, использует только память, а DominantResourceCalculator использует доминантный ресурс для сравнения многомерных ресурсов, таких как память, процессор и т.д."
Затем я изменил это значение на DominantResourceCalculator
.
Но затем, когда я перезапустил YARN и запустил одно и то же приложение Spark, я все равно получил тот же результат, скажем, показатели кластера все еще говорят, что VCores используется 4! Я также проверил использование ЦП и памяти на каждом node с помощью команды htop, я обнаружил, что ни один из узлов не имел всех 10 ядер процессора. В чем причина?
Я попытался также выполнить одно и то же задание Spark, скажем, с помощью --num executors 40 --executor-cores 1
, таким образом, я снова проверил статус CPU для каждого рабочего node, и все ядра ЦП полностью заняты.