Почему vcore всегда равно количеству узлов в Spark на YARN?
У меня есть 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, и все ядра ЦП полностью заняты.
Ответы
Ответ 1
Исполнители принимают 10 ядра, 2 ядра для Мастер приложений= 42 > Ядро запрашивает, когда у вас 40 vCores total.
Уменьшите ядра исполнителей до 8 и обязательно перезапустите каждый NodeManager
Также измените yarn-site.xml и установите следующие свойства:
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores
Ответ 2
Мне было интересно то же самое, но изменение ресурса-калькулятора работало для меня.
Вот как я установил свойство:
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
Проверьте в YARN UI в приложении количество контейнеров и vcores, с изменением количества контейнеров должно быть исполнителей + 1, а vcores должны быть: (executor-corees * num-executors) +1.
Ответ 3
Без установки планировщика YARN на FairScheduler я увидел то же самое. Пользовательский интерфейс Spark показал правильное количество задач, хотя и предполагал, что ничего не случилось. Мой кластер показал около 100% использования ЦП, что подтвердило это.
После настройки FairScheduler ресурсы YARN выглядели правильно.