YARN的capacity調度器主要配置分析


yarn中一個基本的調度單元是隊列。

yarn的內置調度器:

1.FIFO先進先出,一個的簡單調度器,適合低負載集群。
2.Capacity調度器,給不同隊列(即用戶或用戶組)分配一個預期最小容量,在每個隊列內部用層次化的FIFO來調度多個應用程序。
3.Fair公平調度器,針對不同的應用(也可以為用戶或用戶組),每個應用屬於一個隊列,主旨是讓每個應用分配的資源大體相當。(當然可以設置權重),若是只有一個應用,那集群所有資源都是他的。 適用情況:共享大集群、隊列之間有較大差別。

capacity調度器的啟用:

在ResourceManager節點上的yarn-site.xml設置
Property===>yarn.resourcemanager.scheduler.class
Value=====>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

capacity調度器的配置:

在目錄$HADOOP_HOME/hadoop/etc/hadoop/capacity-scheduler.xml

修改完成后,需要執行下面的命令:

$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues    使功能動態生效。

 

capacity-scheduler.xml的配置

1.定義層級隊列

 1 <property>
 2   <name>yarn.scheduler.capacity.root.queues</name> 
 3   <value>a,b,c</value>            //root根隊列下有三個子隊列
 4   <description>The queues at the this level (root is the root queue).
 5   </description>
 6 </property>
 7 
 8 <property>
 9   <name>yarn.scheduler.capacity.root.a.queues</name>
10   <value>a1,a2</value>            //root.a隊列下有2個子隊列
11   <description>The queues at the this level (root is the root queue).
12   </description>
13 </property>
14 
15 <property>
16   <name>yarn.scheduler.capacity.root.b.queues</name>
17   <value>b1,b2,b3</value>        //root.b隊列下有3個子隊列
18   <description>The queues at the this level (root is the root queue).
19   </description>
20 </property>

2.隊列的調度

如上定義了

/----------a-----------a1

       -----------a2

     b----------b1

      ----------b2

      ----------b3

     c

這種結構的隊列。

隊列調度算法工作方式

  • 在每一層級,隊列排序是根據當前隊列使用資源的占比確定的,(占比相同,根據隊列全路徑名排序)
  • 根隊列將集群容量分配給第一層父隊列(a,b,c),並對每個父隊列遞歸調度。(a,b,c三個隊列容量之和為100,容量是按百分比分配的)
  • 父隊列下的(同層級)子隊列調度同上,也按容量限制。
  • 子隊列下管理的多個應用程序,按照FIFO方式調度資源。

每個隊列都有最大最小資源占用限制,單個用戶不會占盡集群資源,后文Capacity資源分配部分會詳細介紹。

3.隊列的訪問權限控制

配置文件 $HADOOP_HOME/hadoop/etc/hadoop/capacity-scheduler.xml

<property>
  <name>yarn.scheduler.capacity.root.a.acl_submit_applications</name> 
  <value>user1,user2 group</value>            
</property>
<property>
  <name>yarn.scheduler.capacity.root.a.acl_administer_queue</name> 
  <value>"group"</value>            
</property>

配置了可以提交任務到root.a隊列的用戶或用戶組,其他用戶沒有權限提交任務到這個隊列。value=*表示所有用戶都可以提交。

root.a隊列的管理員group,有權限查看該隊列所有用戶提交的應用程序細節。

4.隊列容量配置

  <property>
    <name>yarn.scheduler.capacity.root.a.capacity</name>
    <value>40</value>
    <description>隊列a占40%</description>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.b.capacity</name>
    <value>50</value>
    <description>隊列b占50%</description>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.c.capacity</name>
    <value>10</value>
    <description>隊列c占10%</description>
  </property>

隊列容量是以百分比表示的,按照a:b:c即4:5:1的比例共享集群資源。

子隊列容量配置

  <property>
    <name>yarn.scheduler.capacity.root.a.a1.capacity</name>
    <value>30</value>
    <description>隊列root.a.a1占30%</description>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.a.a2.capacity</name>
    <value>70</value>
    <description>隊列root.a.a2占70%</description>
  </property>

層級結構中同層級子隊列容量之和不超過100%。

容量彈性配置項

  <property>
    <name>yarn.scheduler.capacity.root.a.a1.maximum-capacity</name>
    <value>40</value>
  </property>

該設置項表示可以超出父隊列容量的40%,即總容量=分配的容量*140%。(實在其他隊列空閑的情況下,若是其他隊列有充足的任務進行,是按照比例分配的)

5.用戶級別限制

用戶最小資源占用設置

 <property>
    <name>yarn.scheduler.capacity.root.a.a1.minimun-user-limit-percent</name>
    <value>20</value>
  </property>

如上配置表示一個用戶最少能占用隊列root.a.a1容量的20%。

隨着提交任務用戶數的增長,有如下情況:

1.剛開始隊列空閑,只有user1提交任務后,user1獨占隊列。

2.user2開始提交任務,user1多占用的資源不會立即釋放,等user1的Container完成任務后才分配給user2。(如果Capacity調度器的搶占功能打開,user1占用的Container會被立即殺死並分配給user2)

3.第6個用戶user6提交任務后(前5個用戶都有任務在執行),不會分配資源給user6,應為要保證最少資源占用20%的保障,user6會放在等待列表,等待一個或多個用戶任務結束。

4.每個用戶提交的任務,基於FIFO順序調度,先提交的任務優先級高於后提交的任務。

用戶容量彈性配置項

 <property>
    <name>yarn.scheduler.capacity.root.a.a1.user-limit-factor</name>
    <value>2</value>
  </property>

該配置默認值為1,表示單個用戶最大可以占該隊列容量的100%,為2表示單個用戶最大可以占該隊列容量的200%。

6.隊列的狀態

YARN中隊列有2種狀態:運行和停止。

<property>
    <name>yarn.scheduler.capacity.root.a.a1.state</name>
    <value>RUNNING</value>
    <description>
      State can be one of RUNNING or STOPPED.
    </description>
  </property>

7.應用程序限制

  <property>
    <name>yarn.scheduler.capacity.maximum-applications</name>
    <value>10000</value>
    <description>
   特定隊列最大允許應用程序總數
    </description>
  </property>

  <property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.1</value>
    <description>
      AppMaster占用隊列資源的最大比例
    </description>
  </property>

若要限制指定隊列,修改為yarn.scheduler.capacity.root.a.maximum-am-resource-percent和yarn.scheduler.capacity.root.a.maximum-applications

 

參考:

《hadoop yarn權威指南》第8章 YARN中的Capacity調度器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM