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.xml
或 spark-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
这也有效。
无论我如何修改 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.xml
或 spark-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
这也有效。