Apache Hadoop Yarn-Subutilización de núcleos
apache-spark resourcemanager (2)
El problema no radica en yarn-site.xml
o spark-defaults.conf
sino en la calculadora de recursos que asigna los núcleos a los ejecutores o, en el caso de los trabajos MapReduce, a los Mappers / Reductores.
La calculadora de recursos predeterminada, es decir, org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator
utiliza solo información de memoria para asignar contenedores y la programación de la CPU no está habilitada de forma predeterminada. Para usar tanto la memoria como la CPU, la calculadora de recursos debe cambiarse a org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
en el archivo capacity-scheduler.xml
.
Esto es lo que necesita cambiar.
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
No importa cuánto trabajo con la configuración en yarn-site.xml
es decir, utilizando todas las opciones a continuación.
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
Todavía no puedo obtener mi aplicación, es decir, Spark para utilizar todos los núcleos del clúster. Los ejecutores de la chispa parecen estar ocupando correctamente toda la memoria disponible, pero cada ejecutor sigue tomando un solo núcleo y no más.
Estas son las opciones configuradas en 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
Tenga en cuenta que spark.executor.cores
se establece en 3, pero no funciona. ¿Cómo puedo solucionar esto?
Tuve el mismo tipo de problema y desde mi código estaba configurando el spark.executor.cores as 5
. A pesar de que solo estaba tomando 1, que es el núcleo por defecto. En la interfaz de usuario de la chispa y en la pestaña de entorno estaba viendo 5 núcleos. Pero mientras revisaba las pestañas de los ejecutores, solo pude ver que 1 proceso está en estado EN EJECUCIÓN contra un ejecutor. Yo estaba usando la versión de chispa 1.6.3 .
Entonces, he intentado golpear el comando spark-submit como --conf spark.executor.cores=5
que funciona bien ya que usa 5 núcleos
o solo
--executor-cores 5
que también funciona.