admin管理员组

文章数量:1611940

本文是一篇设置Capacity Scheduler的队列的Demo

以前一直没有考虑过这个事情,作为一个数据开发,我只是拿到了我使用的队列,但是一直没有思考过,应该如何划分队列,所以接下来我会记录下CapacityScheduler和FairScheduler的Demo(FifoScheduler我就不说了,好像基本没什么公司用吧),当然这篇文章只记录CapacityScheduler

yarn的队列有三种模式

分别是先入先出,容量调度,公平调度,分别对应以下三个类,大家有兴趣可以阅读下源码

org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

 

一、前言

我想要做的队列如下:

(1)、把root队列,划分成3部分,default=10%,prod=40%,dev=50%,然后再把dev分成end=65%,science=35%

(2)、default最大100%,dev最大75%,prod最大75%,eng最大100%,science最大100%

 

 

二、相关配置

修改配置文件capacity-scheduler.xml

其实我配了些乱七八糟的东西,最原始的配置方式,就是设置队列的容量和队列的最大值就够了

 

<?xml version="1.0"?>
<configuration>
  <property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.75</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.node-locality-delay</name>
    <value>-1</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.maximum-applications</name>
    <value>10000</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.queue-mappings-override.enable</name>
    <value>false</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>prod,dev,default</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.capacity</name>
    <value>40</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.maximum-capacity</name>
    <value>75</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.minimum-user-limit-percent</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.user-limit-factor</name>
    <value>2</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.maximum-allocation-mb</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.maximum-allocation-vcores</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.state</name>
    <value>RUNNING</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.maximum-applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.maximum-am-resource-percent</name>
    <value>0.25</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.acl_submit_applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.acl_administer_queue</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.capacity</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
    <value>75</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.minimum-user-limit-percent</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.user-limit-factor</name>
    <value>2</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-allocation-mb</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-allocation-vcores</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.state</name>
    <value>RUNNING</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-am-resource-percent</name>
    <value>0.25</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.acl_submit_applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.acl_administer_queue</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.queues</name>
    <value>eng,science</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.minimum-user-limit-percent</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.user-limit-factor</name>
    <value>2</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.maximum-applications</name>
    <value>10000</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.acl_submit_applications</name>
    <value>*</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.acl_administer_queue</name>
    <value>*</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.maximum-am-resource-percent</name>
    <value>0.25</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
    <value>65</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.maximum-capacity</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.state</name>
    <value>RUNNING</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.capacity</name>
    <value>35</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.maximum-capacity</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.minimum-user-limit-percent</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.user-limit-factor</name>
    <value>2</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.maximum-allocation-mb</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.maximum-allocation-vcores</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.state</name>
    <value>RUNNING</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.maximum-applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.maximum-am-resource-percent</name>
    <value>0.25</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.acl_submit_applications</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.acl_administer_queue</name>
    <value></value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.minimum-user-limit-percent</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.maximum-am-resource-percent</name>
    <value>0.25</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>10</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
    <value>2</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>
    <value>*</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.state</name>
    <value>RUNNING</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
    <value>*</value>
  </property>
</configuration>

 

三、个别参数说明:

1、yarn.scheduler.capacity.root.<队列名称>.user-limit-factor

这个参数说的是单个用户最多能够吃这个队列中多少的资源,配置是从0到1的值,但其实是可以配置大于1的值,这样的场景用于,当这个队列的容量设置的比较小,但是他的最大值比较大,那单个用户使用资源就可以突破限制!

我举个例子说明:

default,容量只有10%,但是最大上限是100%,如果上面的值配置1的话,假设hadoop用户提交了3个任务,default已经被使用100%,这时候,第4个任务就提交不上去,不过如果用其他用户提交到default上的话,就还可以申请到资源(因为最大上限是100%),那么如何让hadoop能够继续提交作业呢?对,就是将上述的值配置大于1,那么单个用户就可以使用大于这个队列的资源了

2、yarn.scheduler.capacity.root.<队列名称>.acl_submit_applications

设置哪个用户又权限提交到这个队列中,逗号分隔,比如hadoop,spark这样

3、yarn.scheduler.capacity.maximum-am-resource-percent

设置该队列中ApplicationMaster能够占用的资源比,如果太小的话,有可能队列中还有资源,但是任务申请ApplicationMaster失败,导致作业提交不了

其他的参数,我觉得没什么要说的,大家百度下或者参照开源文档

官网地址:https://hadoop.apache/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

 

四、生效

一般情况下,如果只是调整容量的配比,刷新下queue的配置就可以

yarn rmadmin -refreshQueues

当然有时候刷新配置会报错,那就只能重启了

 

推荐两篇不错的文章:

YARN资源调度策略之Capacity Scheduler:https://www.jianshu/p/1d5df94de97f(作者:阳一yayi)

Yarn Capacity Scheduler配置:https://wwwblogs/jichui/p/10444960.html(作者:匕首博)

 

好了今天就说到这里了,其实只是记录下我做的这个例子

下次写一下Fair的配置!菜鸡一只,努力学习~如果有哪里说错的,欢迎大家批评指出,我一定坚决改正!

今年买了2月10号的回家的票,好快了又要过年了,想到2020年年初,我自己一个人加一只狗住在上海,看着刚买的投影仪,感触颇多,这一年也真的是发生了很多事情,有了很多新的变化,希望每个人的2021都能够过得更好!

 

==================================后记==========================================

本来想单独写一篇fair的文章的,但是看到有一篇文章写的很好,而且我也没什么补充的了,所以我就不写了

yarn中资源调度fair schedule详解:https://blog.csdn/sinat_29581293/article/details/58143159(作者:love others as self)

这里我也附上官网链接,建议英文不好的小伙伴也要去看官网,因为这才是权威:

https://hadoop.apache/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

我觉得写文章一定要有自己的东西(不论是自己的心得,自己的测试都可以),否则如果只是生搬硬套别人的文章,那不如不要写了,直接给别人的文章引流就好了

 

本文标签: 链接yarnCapacityFAIR