Apache Hadoop Yarn - 内核利用率不足

Apache Hadoop Yarn - Underutilization of cores

无论我如何修改 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

我仍然无法让我的应用程序(即 Spark)利用集群上的所有核心。 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,但它不起作用。 我该如何解决这个问题?

问题不在于 yarn-site.xmlspark-defaults.conf,而实际上在于将核心分配给执行程序的资源计算器,或者在 MapReduce 作业的情况下,分配给 Mappers/Reducers。

默认资源计算器,即 org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator 仅使用内存信息来分配容器,并且 CPU 调度在默认情况下未启用。要同时使用内存和 CPU,需要在 capacity-scheduler.xml 文件中将资源计算器更改为 org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

以下是需要更改的内容。

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

我遇到了类似的问题,根据我的代码,我正在设置 spark.executor.cores as 5。 即使它只是采用默认核心 1。在 spark UI 和环境选项卡中,我看到了 5 个内核。但是在检查执行程序选项卡时,我只能看到 1 个进程处于针对执行程序的 运行 状态。 我使用的是 spark 版本 1.6.3.

然后我尝试点击 spark-submit 命令 --conf spark.executor.cores=5 使用 5 个核心时工作正常

或者只是

--executor-cores 5 这也有效。