2014-08-29 94 views
7

我使用的是Hadoop-2.4.0,我的系统配置是24核心,96 GB RAM。纱线不遵守yarn.nodemanager.resource.cpu-vcores

我使用以下CONFIGS

mapreduce.map.cpu.vcores=1 
yarn.nodemanager.resource.cpu-vcores=10 
yarn.scheduler.minimum-allocation-vcores=1 
yarn.scheduler.maximum-allocation-vcores=4 
yarn.app.mapreduce.am.resource.cpu-vcores=1 

yarn.nodemanager.resource.memory-mb=88064 
mapreduce.map.memory.mb=3072 
mapreduce.map.java.opts=-Xmx2048m 

容量调度CONFIGS

queue.default.capacity=50 
queue.default.maximum_capacity=100 
yarn.scheduler.capacity.root.default.user-limit-factor=2 

通过以上CONFIGS,我预计纱线不会推出每个节点超过10个映射器,但它推出28名映射器每个节点。 我做错了什么?

回答

22

YARN运行的容器多于分配的内核,因为默认使用DefaultResourceCalculator。它只考虑内存。

public int computeAvailableContainers(Resource available, Resource required) { 
// Only consider memory 
return available.getMemory()/required.getMemory(); 
    } 

使用DominantResourceCalculator,它同时使用cpu和内存。

设置以下配置在能力scheduler.xml

yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator 

更多DominantResourceCalculator

+5

好的答案陪代码样本与未来的读者解释。当问这个问题的人可能会理解你的答案时,解释你如何到达它会帮助无数其他人。 – Stonz2 2014-08-29 15:06:00

+0

@ Stonz2我对不完整的答案表示歉意。我问了这个问题,接下来的4-5小时没有答案,它只有5个视图。同时我也调试了代码并找到了答案。为了帮助其他人,我很快添加了所需的配置,我不得不围绕它运行更多的实验。 – banjara 2014-08-29 17:07:38

+0

我花了几个小时试图弄清楚为什么YARN告诉我在我的节点上有可用的负数的核心数! – jonson 2016-01-07 01:44:03