纱线不尊重yarn.nodemanager.resource.cpu-vcores

ban*_*ara 15 hadoop mapreduce cloudera hadoop-yarn hadoop2

我正在使用Hadoop-2.4.0,我的系统配置是24核,96 GB RAM.

我正在使用以下配置

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
Run Code Online (Sandbox Code Playgroud)

容量调度程序配置

queue.default.capacity=50
queue.default.maximum_capacity=100
yarn.scheduler.capacity.root.default.user-limit-factor=2
Run Code Online (Sandbox Code Playgroud)

有了上述配置,我预计每个节点纱线不会超过10个映射器,但它每个节点启动28个映射器.难道我做错了什么??

ban*_*ara 34

YARN运行的容器多于分配的核心,因为默认使用 DefaultResourceCalculator.它只考虑记忆.

public int computeAvailableContainers(Resource available, Resource required) {
// Only consider memory
return available.getMemory() / required.getMemory();
  }
Run Code Online (Sandbox Code Playgroud)

使用DominantResourceCalculator,它使用cpu和内存.

在capacity-scheduler.xml中设置以下配置

yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
Run Code Online (Sandbox Code Playgroud)

有关DominantResourceCalculator的更多信息

  • 代码示例附带好的答案,并为将来的读者提供解释.虽然提出这个问题的人可能会理解你的答案,但解释你如何达到这个问题将会帮助无数其他人. (5认同)