Hadoop集群管理員希望能對集群Yarn作業的資源進行控制。根據不同的業務組或不同的用戶,對Yarn的資源池進行划分,達到資源管控、任務管控的效果。通過CM可以進行Yarn動態資源的配置,這里Fayson主要介紹如何在Cloudera Manager中配置Yarn動態資源池的放置規則。
在這里Fayson主要用一個場景進行描述,在不給作業指定資源池的情況下,通過CM的放置策略將不同的用戶提交的作業自動分配到指定的資源池中。
- 內容概述
1.測試環境描述
2.總結
- 測試環境
1.RedHat7.3
2.CM和CDH版本為5.15
2.場景描述
實例場景如下:當前CDH集群供多個業務部門使用,在Yarn中為不同的業務組划分不同的資源池,對應業務組的用戶作業需要自動的提交到划分的資源池中。如下圖所示:

通過上圖可以看到有Yarn的資源池中創建3個隊列:業務組A、業務組B、default。右邊有多個業務組的用戶,在用戶提交作業時需要根據用戶所在的也業務組不同自動為用戶分配不通的資源池,接下來Fayson通過具體的Yarn動態資源池放置規則的配置進行實現。
3.測試用戶准備
在配置前Fayson先准備三個測試用戶usera、userc和usere,三個用戶的組分別為testa、testb、testc。
1.在CDH集群的所有節點創建testa、testb、testc三個組,testa表示“業務組A”、testb表示“業務組B”、testc不屬於任何業務組。
[root@cdh01 shell]# sh ssh_do_all.sh node.list "groupadd testa" [root@cdh01 shell]# sh ssh_do_all.sh node.list "groupadd testb" [root@cdh01 shell]# sh ssh_do_all.sh node.list "groupadd testc"
(可左右滑動)

2.在集群所有節點創建usera、userc、usere三個用戶
[root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd usera" [root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd userc" [root@cdh01 shell]# sh ssh_do_all.sh node.list "useradd usere"
(可左右滑動)

3.將usera添加groupa組,userc添加groupb組,usere添加groupc組
sh ssh_do_all.sh node.list "usermod -a -G testa usera" sh ssh_do_all.sh node.list "usermod -a -G testb userc" sh ssh_do_all.sh node.list "usermod -a -G testc usere"
(可左右滑動)

4.驗證創建的測試用戶是否已添加到對應的業務組中

4.Yarn動態資源池配置
根據上述的需求場景,這里需要修改默認Yarn資源池配置,將資源池按照上面的業務組進行創建,在root根資源池下面分別創建testa、testb、default三個資源池。
1.使用管理員登錄CM,進入Yarn動態資源池管理界面

2.刪除默認的資源池配置,將資源池配置為如下

注意:資源池的名稱需要與業務組的名稱一致,否則會導致用戶不能匹配到相應的資源池。
5.放置規則設置
在上一步完成的資源池的配置,並沒有進行放置規則的配置,如果使用默認的放置規則,usera、userc、usere用戶提交的作業均會被分配到default池,接下來需要進行放置規則的配置。
1.在Yarn的動態資源池配置界面點擊菜單“放置規則”,進入配置界面

2.將默認的放置規則刪除,添加新的放置規則,三條規則分別如下:
規則一:“root.[pool name]”

規則二:“root.[secondary group]”

規則三:“已在運行時指定”,取消勾選“池不存在時創建池”

3.創建完成后的放置規則順序如下:

關於放置規則類型的解釋說明:
root.[pool name]:該規則始終滿足,在其它規則不匹配的情況下使用,因此該規則默認要放置在所有匹配規則之后。
root.[pool name].[username]:該放置規則會判斷資源池中是否存在相應的pool name,存在則在該資源池下創建與用戶名相同的資源池(勾選池不存在時創建池的情況下)。
root.[primary group]:該放規則使用與該用戶主要組匹配的資源池。Linux中用戶默認的主要組與用戶名一致,匹配時會通過用戶的主要組與資源池名稱比對。
root.[primary group].[username]:該放置規則會優先使用用戶的主要組匹配的資源池,然后使用與該用戶名匹配的子池,如果勾選池不存在時創建池則會在該池下創建一個與用戶名一致的子池。
root.[secondarygroup]:該放置規則用於匹配用戶的次要組,使用與次要組之一匹配的資源池。
root.[secondarygroup].[username]:該放置規則首先匹配用戶的次要組,然后使用與該用戶名匹配的資源池。
root.[username]:該放置規則用於匹配與用戶名一致的資源池。(不推薦使用)
已在運行時指定:該放置規則主要使用在運行時指定的資源池。
放置規則的判斷方式,根據放置規則的順序1、2、3…進行判斷,判斷到滿足條件的放置規則后,后續的規則不再進行匹配。
6.驗證放置規則
分別使用usera、userc、usere三個用戶向集群提交作業,根據上述規則的設置,usera用戶提交的作業回到groupa資源池,userc用戶提交的作業會到groupb資源池,userc用戶提交的作業會到default資源池。如下為作業提交腳本:
[root@cdh01 ~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5
(可左右滑動)
1.使用usera向集群提交作業

2.使用userc向集群提交MR作業

3.使用usere向集群提交MR作業

4.在CM和Yarn的8088界面上查看三個用戶作業所分配的資源池


7.總結
1.通過配置放置規則的方式可以將不同用戶或不同業務的作業划分到指定的資源池中,在示例中Fayson使用了Secondary Group放置規則來划分用戶作業所屬資源池。
2.在Secondary Group放置規則中,用戶除了主要組外其他組均為次要組,都可以走Secondary Group的放置策略。