Подтвердить что ты не робот

Почему 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, и все ядра ЦП полностью заняты.

4b9b3361

Ответ 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 выглядели правильно.