[英]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 executor 似乎正確地占用了所有可用內存,但每個 executor 只占用一個內核,僅此而已。
以下是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
設置spark.executor.cores as 5
。 即使它只是取 1,這是默認的核心。 在 spark UI 和環境選項卡中,我看到了 5 個內核。 但是在檢查執行程序選項卡時,我只能看到 1 個進程處於針對執行程序的RUNNING狀態。 我使用的是 spark 版本1.6.3 。
因此,我嘗試將 spark-submit 命令設為--conf spark.executor.cores=5
,它在使用 5 個內核時工作正常
要不就
--executor-cores 5
也可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.