Hadoop YARN中 VCores used 与 VCores Avail 数量不相符, YARN WebUI中显示的VCores数不对

1.问题复现

如图,在yarn-site.xml中我设置的VCores是2个,每个节点提供2GB内存,在mapred-site.xml中设置的每个container是384M。提交了很多任务后,yarn调度器按照 (2GB * 1024)/ 384 = 5 余 128M ,每个节点申请了5个container,但我设置的VCores只有两个,怎么能有这么多container呢?

Hadoop YARN中 VCores used 与 VCores Avail 数量不相符, YARN WebUI中显示的VCores数不对_第1张图片

 2.分析

是不是有什么参数没有限制住VCores的变化,去官方文档中yarn-site.xml和mapred-site.xml中找关于VCore的参数,没有找有关这个问题的。最后发现这个问题是在capacity的配置文件中设置的,如下:

yarn.scheduler.capacity.resource-calculator

The ResourceCalculator implementation to be used to compare Resources in the scheduler. The default i.e. org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator only uses Memory while DominantResourceCalculator uses Dominant-resource to compare multi-dimensional resources such as Memory, CPU etc. A Java ResourceCalculator class name is expected.

DefaultResourceCalculator它在申请Container时其实只会考虑内存而不考虑VCores,DominantResourceCalculator考虑多维资源例如内存和CPU,也就是它会考虑所设置的VCore的数量。

 3.解决

在capacity-scheduler.xml中修改

org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator

修改为:

org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

Hadoop YARN中 VCores used 与 VCores Avail 数量不相符, YARN WebUI中显示的VCores数不对_第2张图片

修改后:因为每个节点只有两个VCore,剩余了很多内存资源

Hadoop YARN中 VCores used 与 VCores Avail 数量不相符, YARN WebUI中显示的VCores数不对_第3张图片 

你可能感兴趣的:(大数据)