2014-08-29 95 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