Пряжа Apache Hadoop - Недостаточное использование сердечников

Независимо от того, насколько я возился с настройками в yarn-site.xml, используя все приведенные ниже опции

yarn.scheduler.minimum-allocation-vcores
yarn.nodemanager.resource.memory-mb
yarn.nodemanager.resource.cpu-vcores
yarn.scheduler.maximum-allocation-mb
yarn.scheduler.maximum-allocation-vcores

Я просто все еще не могу получить свое приложение i.e Spark, чтобы использовать все ядра в кластере. Кажется, что исполнители искры правильно занимают всю доступную память, но каждый исполнитель просто держит одно ядро ​​и не более.

Вот настройки, настроенные в spark-defaults.conf

spark.executor.cores                    3
spark.executor.memory                   5100m
spark.yarn.executor.memoryOverhead      800
spark.driver.memory                     2g
spark.yarn.driver.memoryOverhead        400
spark.executor.instances                28
spark.reducer.maxMbInFlight             120
spark.shuffle.file.buffer.kb            200

Обратите внимание, что для параметра spark.executor.cores установлено значение 3, но оно не работает. Как это исправить?

Ответы

Ответ 1

Проблема заключается не в yarn-site.xml или spark-defaults.conf, а на самом деле с калькулятором ресурсов, который присваивает ядра исполнителям или в случае заданий MapReduce для Mappers/Reducers.

Калькулятор ресурсов по умолчанию i.e org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator использует только информацию о памяти для распределения контейнеров, а планирование по умолчанию не включено по умолчанию. Для использования как памяти, так и ЦП калькулятор ресурсов необходимо изменить на org.apache.hadoop.yarn.util.resource.DominantResourceCalculator в файле capacity-scheduler.xml.

Здесь что нужно изменить.

<property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>