yarn资源管理

1.文档编写目的

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的放置策略。

posted @ 2019-03-07 11:32  bioamin  阅读(1591)  评论(0编辑  收藏  举报