Capacity Scheduler 中资源计算器(Resource Calculator)的使用

概述

  yarn.scheduler.capacity.resource-calculator:该配置指定调度器使用的资源计算器,资源计算器用于在调度器中比较资源。默认值是 org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator,只使用内存进行比较,而DominantResourceCalculator 用 Dominant-resource比较多维度资源,如内存,CPU等等。
  在文章 《Capacity Scheduler 中 user-limit-factor 参数的理解》的最后,我们提到了集群资源的限制是完全基于内存,而没有使用vCore。原因就是容量调度器默认的资源计算器是 DefaultResourseCalculator,那么如果使用另一种DominantResourceCalculator 资源计算器,能否使资源的限制同时基于内存和CPU这2个维度呢?

验证

  我们通过实际测试来验证,将该参数改为DominantResourceCalculator,如下:

 <property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
  </property>

  修改该参数需要重启RM才能生效。
  队列的资源配置如下:

<property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>1.0</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>20.0</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
    <value>5.0</value>
  </property>

  集群资源情况如下:
在这里插入图片描述
  然后提交测试任务

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.3.1.0.17-1.jar\
   teragen\
   -Dmapred.map.tasks=1000 100000000000 /benchmarks/terasort-input

  按照配置,user-limit-facto 为5.0 ,也就是任务最多能使用队列资源的5倍,也就是大约250GB的内存和30个vCore.

  查看集群资源使用情况
在这里插入图片描述
  可以看做,vCore的限制终于生效了。内存只用了64GB,vCore使用32个(其中包括了AM使用的2个vCore),由于vCore的限制使得无法继续使用更多资源了。

  然后继续调整 user-limit-facto 为50

  <property>
    <name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
    <value>50.0</value>
  </property>

  刷新队列后,查看资源使用情况

在这里插入图片描述
  由于最大资源的限制,作业只用了244G的内存;队列最大123个vCore用了122个,剩余1个vCore没使用,是因为每个container最少需要2个vcore
在这里插入图片描述

结论

  至此我们就解决了文章 《Capacity Scheduler 中 user-limit-factor 参数的理解》最后提出的疑问,是因为Capacity Scheduler 的资源计算器使用的是默认的DefaultResourseCalculator。

发布了57 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/100813294