1. 程式人生 > >Hadoop YARN配置引數剖析—Capacity Scheduler相關引數

Hadoop YARN配置引數剖析—Capacity Scheduler相關引數

Capacity Scheduler是YARN中預設的資源排程器。

想要了解Capacity Scheduler是什麼,可閱讀我的這篇文章“Hadoop Capacity Scheduler分析”

Capacity Scheduler的配置檔案中,佇列queueX的引數Y的配置名稱為yarn.scheduler.capacity.queueX.Y,為了簡單起見,我們記為Y,則每個佇列可以配置的引數如下:

1.  資源分配相關引數

(1)  capacity:佇列的資源容量(百分比)。 當系統非常繁忙時,應保證每個佇列的容量得到滿足,而如果每個佇列應用程式較少,可將剩餘資源共享給其他佇列。注意,所有佇列的容量之和應小於100。

(2)  maximum-capacity:佇列的資源使用上限(百分比)。由於存在資源共享,因此一個佇列使用的資源量可能超過其容量,而最多使用資源量可通過該引數限制。

m  minimum-user-limit-percent:每個使用者最低資源保障(百分比)。任何時刻,一個佇列中每個使用者可使用的資源量均有一定的限制。當一個佇列中同時執行多個使用者的應用程式時中,每個使用者的使用資源量在一個最小值和最大值之間浮動,其中,最小值取決於正在執行的應用程式數目,而最大值則由minimum-user-limit-percent決定。比如,假設minimum-user-limit-percent

為25。當兩個使用者向該佇列提交應用程式時,每個使用者可使用資源量不能超過50%,如果三個使用者提交應用程式,則每個使用者可使用資源量不能超多33%,如果四個或者更多使用者提交應用程式,則每個使用者可用資源量不能超過25%。

(3)  user-limit-factor:每個使用者最多可使用的資源量(百分比)。比如,假設該值為30,則任何時刻,每個使用者使用的資源量不能超過該佇列容量的30%。

2.  限制應用程式數目相關引數

(1)  maximum-applications :叢集或者佇列中同時處於等待和執行狀態的應用程式數目上限,這是一個強限制,一旦叢集中應用程式數目超過該上限,後續提交的應用程式將被拒絕,預設值為10000。所有佇列的數目上限可通過引數yarn.scheduler.capacity.maximum-applications設定(可看做預設值),而單個佇列可通過引數yarn.scheduler.capacity.<queue-path>.maximum-applications設定適合自己的值。

(2)  maximum-am-resource-percent:叢集中用於執行應用程式ApplicationMaster的資源比例上限,該引數通常用於限制處於活動狀態的應用程式數目。該引數型別為浮點型,預設是0.1,表示10%。所有佇列的ApplicationMaster資源比例上限可通過引數yarn.scheduler.capacity. maximum-am-resource-percent設定(可看做預設值),而單個佇列可通過引數yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent設定適合自己的值。

3.  佇列訪問和許可權控制引數

(1)  state 佇列狀態可以為STOPPED或者RUNNING,如果一個佇列處於STOPPED狀態,使用者不可以將應用程式提交到該佇列或者它的子佇列中,類似的,如果ROOT佇列處於STOPPED狀態,使用者不可以向叢集中提交應用程式,但正在執行的應用程式仍可以正常執行結束,以便佇列可以優雅地退出。

(2)  acl_submit_applications:限定哪些Linux使用者/使用者組可向給定佇列中提交應用程式。需要注意的是,該屬性具有繼承性,即如果一個使用者可以向某個佇列中提交應用程式,則它可以向它的所有子佇列中提交應用程式。配置該屬性時,使用者之間或使用者組之間用“,”分割,使用者和使用者組之間用空格分割,比如“user1, user2 group1,group2”。

(3)  acl_administer_queue:為佇列指定一個管理員,該管理員可控制該佇列的所有應用程式,比如殺死任意一個應用程式等。同樣,該屬性具有繼承性,如果一個使用者可以向某個佇列中提交應用程式,則它可以向它的所有子佇列中提交應用程式。

一個配置檔案例項如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<configuration>

  <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>叢集中可用於執行application master的資源比例上限,這通常用於限制併發執行的應用程式數目。</description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.queues</name>

    <value>default</value>

    <description>root佇列的所有子佇列,該例項中只有一個</description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.default.capacity</name>

    <value>100</value>

    <description>default佇列的資源容量</description>

  </property>

 

  <property>

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

    <value>1</value>

    <description>

     每個使用者可使用的資源限制

    </description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>

    <value>100</value>

    <description>

      Default佇列可使用的資源上限.

    </description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.default.state</name>

    <value>RUNNING</value>

    <description>

     Default佇列的狀態,可以是RUNNING或者STOPPED.

    </description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>

    <value>*</value>

    <description>

      限制哪些使用者可向default佇列中提交應用程式.

    </description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>

    <value>*</value>

    <description>

限制哪些使用者可管理default佇列中的應用程式,“*”表示任意使用者

</description>

  </property>

 

  <property>

    <name>yarn.scheduler.capacity.node-locality-delay</name>

    <value>-1</value>

    <description>排程器嘗試排程一個rack-local container之前,最多跳過的排程機會,通常而言,該值被設定成叢集中機架數目,預設情況下為-1,表示不啟用該功能。

    </description>

  </property>

</configuration>

多個佇列配置例子如下:

下面的配置的是分為兩個佇列default,services,其中資源的比例為:default佇列80% ,services佇列20%

<property>
  <name>yarn.scheduler.capacity.root.queues</name>
  <value>default,services</value>
  <description>分為兩個佇列</description>
</property>
<property>
  <name>yarn.scheduler.capacity.root.default.capacity</name>
  <value>80</value>
  <description>default佇列80%</description>
</property>
<property>
  <name>yarn.scheduler.capacity.root.services.capacity</name>
  <value>20</value>
  <description>services佇列20%</description>
</property>
<property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>80</value>
    <description>Default佇列可使用的資源上限.</description>
</property>
<property>
    <name>yarn.scheduler.capacity.root.services.maximum-capacity</name>
    <value>20</value>
    <description>services佇列可使用的資源上限.</description>
</property>