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,如下:

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

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


    yarn.scheduler.capacity.root.default.capacity
    1.0
  
  
    yarn.scheduler.capacity.root.default.maximum-capacity
    20.0
  
  
    yarn.scheduler.capacity.root.default.user-limit-factor
    5.0
  

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

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.

  查看集群资源使用情况
Capacity Scheduler 中资源计算器(Resource Calculator)的使用_第1张图片
  可以看做,vCore的限制终于生效了。内存只用了64GB,vCore使用32个(其中包括了AM使用的2个vCore),由于vCore的限制使得无法继续使用更多资源了。

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

  
    yarn.scheduler.capacity.root.default.user-limit-factor
    50.0
  

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

Capacity Scheduler 中资源计算器(Resource Calculator)的使用_第2张图片
  由于最大资源的限制,作业只用了244G的内存;队列最大123个vCore用了122个,剩余1个vCore没使用,是因为每个container最少需要2个vcore
在这里插入图片描述

结论

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

你可能感兴趣的:(YARN)