zoukankan      html  css  js  c++  java
  • 6.capacity scheduler

    1.先决条件

    要使用yarn的capcitiy调度器,必须开启yarn的ACLs,否则队列ACLs设置不生效
    开启yarn ACLs:

    # hadoop: core-site.xml
    hadoop.security.authorization=true  #开启服务级别验证,否则hadoop组件的acl设置不生效
    # yarn: yarn-site.xml
    yarn.acl.enable=true
    yarn.admin.acl=admin

    2.容量调试器

    2.1 特性

    • 分层的队列
    • 队列资源控制
      每个队列的容量app数memory&core数.目前仅能限制内存而不能限制CPU
    • 队列权限控制
      每个队列可以设置 Submit 和admin用户(组),只有这个些用户和组才能 提交和管理队列
    • 资源共享
      队列可以获得超过其容易的资源 如果一个队列容量为70%,但最大容量为100%,则在其它队列空闲的情况下可以使用100%的资源
    • 多租户
      可以限制单个用户和使用资源情况 如限制hive用户只能使用队列资源的20%
    • 动态刷新队列
      可以在运行时停止启动队列,以及重启分配队列的资源及ACL等,但不能在运行时删除队列. 当停止一个队列后,队列中已经运行的程序会继续运行,新的程序将不会提交到队列中.
    • 支持组映射
      可以将特定的用户、组映射到某个队列中

    2.2 配置

    2.2.1.启用capacity

    yarn-site.xml

    yarn.resourcemanager.scheduler.class  org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

    2.2.2.配置capactiy

    配置队列:

    <property>
      <name>yarn.scheduler.capacity.root.queues</name>
      <value>a,b,c</value>
      <description>The queues at the this level (root is the root queue).
      </description>
    </property>
    
    <property>
      <name>yarn.scheduler.capacity.root.a.queues</name>
      <value>a1,a2</value>
      <description>The queues at the this level (root is the root queue).
      </description>
    </property>
    
    <property>
      <name>yarn.scheduler.capacity.root.b.queues</name>
      <value>b1,b2,b3</value>
      <description>The queues at the this level (root is the root queue).
      </description>
    </property>

    root队列下有三个子队列 a b c ,a队列又有两个子队列a1 a2 ,b队列有三个子队列b1 b2 b3

    2.2.3 队列属性

    kvnote
    yarn.scheduler.capacity..capacity 队列的容量,百分比,如50%,默认容量. 各队列的默认容量加起来要等于100%  
    yarn.scheduler.capacity..maximum-capacity 最大容量,如100%,表示队列在其它队列空闲时可以使用的最大容量(可以占用其它队列的容量)。默认其它为-1,表示不限制  
    yarn.scheduler.capacity..minimum-user-limit-percent 每个用户可以使用的最小资源百分比。如果设置为25,则一个用户时,最小可以使用25%,最大100%。两个用户:25% 50%,三个25% 33%。4个,25% 25%。 5个,则有一个要等待资源,剩下4个25% 25%  
    yarn.scheduler.capacity..user-limit-factor 单个用户使用的资源因子,浮点数,默认为1,表示用户只能使用队列配置的容量的1倍。 如果队列容量为30%,因子为1,即使集群很闲时,单个用户也只能使用整个集群的30%。配置为3则可以使用整个集群
    yarn.scheduler.capacity..maximum-allocation-mb 队列中,每个container可以申请的最大内存,覆盖yarn的设置yarn.scheduler.maximum-allocation-mb 要注意啊
    yarn.scheduler.capacity..maximum-allocation-vcores 同上,覆盖yarn.scheduler.maximum-allocation-vcores 要注意啊
    yarn.scheduler.capacity..user-settings..weight 用户可以使用的资源权限。有abc三个用户,权限默认为1,如果a设置为1.5,那么a可以使用的资源是bc的1.5 结合上面第二个参数来看

    2.2.4 队列中可执行和等的任务数设置

    | k | v | note |
    | ------------ | ------------ | ------------ |
    |yarn.scheduler.capacity.maximum-applications / yarn.scheduler.capacity..maximum-applications |队列允许提交和等待的任务数,默认是10000.同时提交和执行的任务总数超过这个后,新提交的任务会被拒绝。前面的设置所有的队列,后面的设置特定队列 | |
    |yarn.scheduler.capacity.maximum-am-resource-percent / yarn.scheduler.capacity..maximum-am-resource-percent |appmaster可以使用的集群资源百分比,默认0.1,当有大量小任务时可以改大一点 | |

    2.2.5 队列管理和权限

    kvnote
    yarn.scheduler.capacity..state 队列的状态,可以是RUNNING或者STOPPED。如果状态是STOPPED的,那么应用不能提交到该队列及其子队列。当队列被改为STOPPED后,会等待其中运行的任务结束再关闭 父队列STOPPED了子队列也不能用了
    yarn.scheduler.capacity.root..acl_submit_applications 哪些用户和组有权限提交任务到队列中。子队列会继承父队列的权限。 在父队列有权限的话,就能在子队列提交任务
    yarn.scheduler.capacity.root..acl_administer_queue 同上,这个是管理队列的,了队列也会继续父队列权限  

    用户格式:* 表示任何用户。 user1,user2 group2,group2

    2.2.6 用户和组映射到队列中

    设置用户和组提交到什么队列
    | k | v | note |
    | ------------ | ------------ | ------------ |
    |yarn.scheduler.capacity.queue-mappings |用户组与队列的映射关系,格式为[u or g]:[name]:[queue_name][,next_mapping]*。如果用户名与队列名一致时,可以使用user%代替。当用户的组与队列各一致时,可以使用%primary_group | |
    |yarn.scheduler.capacity.queue-mappings-override.enable |客户端是否可以修改组映射关系,默认是false | |
    示例:

     <property>
       <name>yarn.scheduler.capacity.queue-mappings</name>
       <value>u:user1:queue1,g:group1:queue2,u:%user:%user,u:user2:%primary_group</value>
       <description>
         Here, <user1> is mapped to <queue1>, <group1> is mapped to <queue2>, 
         maps users to queues with the same name as user, <user2> is mapped 
         to queue name same as <primary group> respectively. The mappings will be 
         evaluated from left to right, and the first valid mapping will be used.
       </description>
     </property>

    2.2.6 应用程序的队列生命周期

    kvnote
    yarn.scheduler.capacity..maximum-application-lifetime 应用程序提交到队列后允许在队列内的时间,单位是秒,设置小于等于0禁用此功能。超过这个时间将被kill掉。客户端设置的参数装会被服务端覆盖。注意不能设置的过。对sprak streaming这种错误也有影响吧。该参数只在队列有效  
    yarn.scheduler.capacity.root..default-application-lifetime 默认值,要小于上面的最大值,也是只对子叶节点有效  

    3.设置队列优先级

    4.刷新队列

    $ vi $HADOOP_CONF_DIR/capacity-scheduler.xml
    $ $HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

     





  • 相关阅读:
    BZOJ 1016 最小生成树计数(矩阵树定理)
    sdoi2013 spring(hash+容斥)
    51nod 1301 集合异或和(DP)
    51nod 1576 Tree and permutation(树的重心+dfn序)
    BZOJ 4145 [AMPPZ2014]The Prices (状压DP)
    BZOJ 2260 商店购物(最小树形图)
    BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)
    BZOJ 2595 [Wc2008]游览计划(斯坦纳树)
    BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
    51nod 1392 装盒子(费用流)
  • 原文地址:https://www.cnblogs.com/skyrim/p/10289057.html
Copyright © 2011-2022 走看看