Hadoop多使用者資源管理–Fair Scheduler介紹與配置(Yarn)

hackeruncle發表於2016-07-20

在一個公司內部的Hadoop Yarn叢集,肯定會被多個業務、多個使用者同時使用,共享Yarn的資源,如果不做資源的管理與規劃,那麼整個Yarn的資源很容易被某一個使用者提交的Application佔滿,其它任務只能等待,這種當然很不合理,我們希望每個業務都有屬於自己的特定資源來執行MapReduce任務,Hadoop中提供的公平排程器–Fair Scheduler,就可以滿足這種需求。

Fair Scheduler將整個Yarn的可用資源劃分成多個資源池,每個資源池中可以配置最小和最大的可用資源(記憶體和CPU)、最大可同時執行Application數量、權重、以及可以提交和管理Application的使用者等。

根據使用者名稱分配資源池

Hadoop多使用者資源管理–Fair Scheduler介紹與配置(Yarn)

 

 

如圖所示,假設整個Yarn叢集的可用資源為100vCPU,100GB記憶體,現在為3個業務各自規劃一個資源池,另外,規劃一個default資源池,用於執行其他使用者和業務提交的任務。如果沒有在任務中指定資源池(透過引數mapreduce.job.queuename),那麼可以配置使用使用者名稱作為資源池名稱來提交任務,即使用者businessA提交的任務被分配到資源池businessA中,使用者businessC提交的任務被分配到資源池businessC中。除了配置的固定使用者,其他使用者提交的任務將會被分配到資源池default中。

這裡的使用者名稱,就是提交Application所使用的Linux/Unix使用者名稱。

另外,每個資源池可以配置允許提交任務的使用者名稱,比如,在資源池businessA中配置了允許使用者businessA和使用者lxw1234提交任務,如果使用使用者lxw1234提交任務,並且在任務中指定了資源池為businessA,那麼也可以正常提交到資源池businessA中。

根據權重獲得額外的空閒資源

在每個資源池的配置項中,有個weight屬性(預設為1),標記了資源池的權重,當資源池中有任務等待,並且叢集中有空閒資源時候,每個資源池可以根據權重獲得不同比例的叢集空閒資源。

比如,資源池businessA和businessB的權重分別為2和1,這兩個資源池中的資源都已經跑滿了,並且還有任務在排隊,此時叢集中有30個Container的空閒資源,那麼,businessA將會額外獲得20個Container的資源,businessB會額外獲得10個Container的資源。

 

最小資源保證

在每個資源池中,允許配置該資源池的最小資源,這是為了防止把空閒資源共享出去還未回收的時候,該資源池有任務需要執行時候的資源保證。

比如,資源池businessA中配置了最小資源為(5vCPU,5GB),那麼即使沒有任務執行,Yarn也會為資源池businessA預留出最小資源,一旦有任務需要執行,而叢集中已經沒有其他空閒資源的時候,這個最小資源也可以保證資源池businessA中的任務可以先執行起來,隨後再從叢集中獲取資源。

 

動態更新資源配額

Fair Scheduler除了需要在yarn-site.xml檔案中啟用和配置之外,還需要一個XML檔案來配置資源池以及配額,而該XML中每個資源池的配額可以動態更新,之後使用命令:yarn rmadmin –refreshQueues 來使得其生效即可,不用重啟Yarn叢集。

需要注意的是:動態更新只支援修改資源池配額,如果是新增或減少資源池,則需要重啟Yarn叢集。

Fair Scheduler配置示例

以上面圖中所示的業務場景為例。

yarn-site.xml中的配置:

<!– scheduler start –>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/etc/hadoop/conf/fair-scheduler.xml</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
<description>default is True</description>
</property>
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>false</value>
<description>default is True</description>
</property>
<!– scheduler end –>

  • yarn.resourcemanager.scheduler.class

配置Yarn使用的排程器外掛類名;

Fair Scheduler對應的是:

org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

  • yarn.scheduler.fair.allocation.file

配置資源池以及其屬性配額的XML檔案路徑(本地路徑);

  • yarn.scheduler.fair.preemption

開啟資源搶佔。

  • yarn.scheduler.fair.user-as-default-queue

設定成true,當任務中未指定資源池的時候,將以使用者名稱作為資源池名。這個配置就實現了根據使用者名稱自動分配資源池。

  • yarn.scheduler.fair.allow-undeclared-pools

是否允許建立未定義的資源池。

如果設定成true,yarn將會自動建立任務中指定的未定義過的資源池。設定成false之後,任務中指定的未定義的資源池將無效,該任務會被分配到default資源池中。

 

fair-scheduler.xml中的配置:

<?xml version=”1.0″?>
<allocations>
<!– users max running apps –>
<userMaxAppsDefault>30</userMaxAppsDefault>
<!– queues –>
<queue name=”root”>
<minResources>51200mb,50vcores</minResources>
<maxResources>102400mb,100vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<weight>1.0</weight>
<schedulingMode>fair</schedulingMode>
<aclSubmitApps> </aclSubmitApps>
<aclAdministerApps> </aclAdministerApps>

<queue name=”default”>
<minResources>10240mb,10vcores</minResources>
<maxResources>30720mb,30vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<aclSubmitApps>*</aclSubmitApps>
</queue>

<queue name=”businessA”>
<minResources>5120mb,5vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>2.0</weight>
<aclSubmitApps>businessA,lxw1234 group_businessA,group_lxw1234</aclSubmitApps>
<aclAdministerApps>businessA,hadoop group_businessA,supergroup</aclAdministerApps>
</queue>

<queue name=”businessB”>
<minResources>5120mb,5vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1</weight>
<aclSubmitApps>businessB group_businessA</aclSubmitApps>
<aclAdministerApps>businessA,hadoop group_businessA,supergroup</aclAdministerApps>
</queue>

<queue name=”businessC”>
<minResources>5120mb,5vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.5</weight>
<aclSubmitApps>businessC group_businessC</aclSubmitApps>
<aclAdministerApps>businessC,hadoop group_businessC,supergroup</aclAdministerApps>
</queue>
</queue>
</allocations>

  • minResources

最小資源

  • maxResources

最大資源

  • maxRunningApps

最大同時執行application數量

  • weight

資源池權重

  • aclSubmitApps

允許提交任務的使用者名稱和組;

格式為: 使用者名稱 使用者組

當有多個使用者時候,格式為:使用者名稱1,使用者名稱2 使用者名稱1所屬組,使用者名稱2所屬組

  • aclAdministerApps

允許管理任務的使用者名稱和組;

格式同上。

       Fair Scheduer各資源池配置及使用情況,在ResourceManager的WEB監控頁面上也可以看到:

 Hadoop多使用者資源管理–Fair Scheduler介紹與配置(Yarn)


轉:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2122273/,如需轉載,請註明出處,否則將追究法律責任。

相關文章