Пряжа 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>