CM提供了众多的资源KPI指标,以及丰富的可视化的资源分配、运维和监控界面。运维人员能在单一管理界面配置、监控和导出实时的系统集群资源状态、管理规则以及分用户、任务的使用状况。
CDH 以及 CM 能同时满足动态以及静态的资源管理。
动态资源池可以提供基于 YARN 的动态资源隔离能力,静态资源池可以提供基于 Linux 容器技术的静态资源隔离能力。

动态资源池

Yarn默认有三种调度器——FIFO、Capacity以及Fair Scheduler,CDH推荐使用Fair Scheduler。通过动态资源池的Web UI,我们可以十分方便的配置Fair Scheduler。

动态资源池配置

1)点击群集→动态资源池配置进入动态资源池的配置界面

CDH yarn 资源抢占 cdh资源队列配置_静态资源


2)动态资源池配置——资源池

动态资源池采用树形结构,与Fair Scheduler的队列保持一致,任务只能提交到子池。用户可自定义动态资源池,以将不同任务提交到不同的资源池中。

每一个资源池都有一个权重 (weight)的概念,它定义了资源池资源分配的比例。但并不是说每个资源池都只能获得相应比例的资源。例如,下图中共有三个子池,root.default、root.dev、root.prod,三者的比重相同,理论上应各分得1/3的资源,但假如,当前整个集群只有一个job被提交到了root.dev中,则该job是可以使用整个集群资源的。

下面创建以三个子池——root.default、root.dev、root.prod,权重均为1

CDH yarn 资源抢占 cdh资源队列配置_CDH yarn 资源抢占_02


CDH yarn 资源抢占 cdh资源队列配置_hadoop_03


CDH yarn 资源抢占 cdh资源队列配置_静态资源_04


3)动态资源池配置——计划模式

假如规定我们将所有开发测试的job全部提交到root.dev资源池,所有的生产任务全部提交到root.prod资源池。由于我们的离线任务大多放在夜间执行,而开发测试工作主要在白天执行,很显然,root.dev在白天的时候需要更多的资源,root.prod在夜间需要更多的资源。计划模式就能够自动帮助我们在不同的时间段,刷新不同的资源池配置。

(1)创建计划规则

CDH yarn 资源抢占 cdh资源队列配置_hadoop_05


日间计划规则

CDH yarn 资源抢占 cdh资源队列配置_大数据_06


夜间计划规则

CDH yarn 资源抢占 cdh资源队列配置_hadoop_07

(2)修改资源池

修改root.dev将dev的日间权重适当调大,此处上调到3。

CDH yarn 资源抢占 cdh资源队列配置_CDH yarn 资源抢占_08


CDH yarn 资源抢占 cdh资源队列配置_hadoop_09


CDH yarn 资源抢占 cdh资源队列配置_mapreduce_10


按照相同的步骤,将root.prod的夜间权重适当调大,也上调至3。

4)动态资源池配置——放置规则

动态资源池规划完毕后,需要思考的问题就是,如何确定一个job提交后会被放置到哪一个资源池中。以下是放置规则

CDH yarn 资源抢占 cdh资源队列配置_CDH yarn 资源抢占_11


CDH yarn 资源抢占 cdh资源队列配置_hadoop_12


放置规则可以设置多个,从上到下依次校验,只要有一个规则校验成功,该任务就会被放置到该资源池中,后续规则不再校验,此处设置规则如下5)动态资源池配置——用户限制

用户限制可对具体用户设置同时运行任务数的上限。

CDH yarn 资源抢占 cdh资源队列配置_CDH yarn 资源抢占_13


注意:如需采用最严格的资源权限控制,可以在资源池权限配置中为每个用户组配置相应的资源池,然后此处删除所有放置规则,只添加“已在运行时指定”一条放置规则, 并且不勾选自动创建池,此时用户提交任务时必须指定使用的资源池,方法为指定参数

-Dmapreduce.job.queuename=<pool name>

6)刷新动态资源池

动态资源池刷新之后才可生效

CDH yarn 资源抢占 cdh资源队列配置_hadoop_14

动态资源池实战

1)在集群所有节点创建两个用户组prod、dev

groupadd prod
groupadd dev

2)在集群所有节点创建两个用户prod1,dev1,并指定其用户组分别为prod、dev

useradd prod1 -g prod
useradd dev1 -g dev

3)在HDFS上为两个用户创建家目录,并需改权限

kinit hdfs/hdfs
hadoop fs -mkdir /user/prod1
hadoop fs -chown prod1:prod /user/prod1

hadoop fs -mkdir /user/dev1
hadoop fs -chown dev1:dev /user/dev1

4)为两个用户创建Kerberos主体

[root@hadoop102 ~]# kadmin.local -q "addprinc prod1/prod"
[root@hadoop102 ~]# kadmin.local -q "addprinc dev1/dev"

5)分别用两个用户提交MR,观察集群资源分配情况
(1)prod用户提交

[root@hadoop102 ~]# kinit prod1/prod
[root@hadoop102 ~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 100 10

(2)dev用户提交

[root@hadoop103 ~]# kinit dev1/dev
[root@hadoop103 ~]# hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 100 10

(3)资源分配结果

CDH yarn 资源抢占 cdh资源队列配置_静态资源_15

静态资源池

静态资源隔离能力基于 Linux 容器技术。Linux 容器工具,即 LXC,可以提供轻量级的虚拟化,以便隔离进程和资源。使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,LXC 是在 Linux 平台上基于容器的虚拟化技术的未来标准,最初的 LXC 技术是由 IBM 研发的,目前已经进入 Linux 内核主线,这意味着 LXC 技术将是目前最有竞争力的轻量级虚拟容器技术。LXC 项目由一个 Linux 内核补丁和一些用户空间(userspace)工具组成。这些工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。2.6.29 版本后的 Linux 内核版本已经包含该补丁提供的大部分功能。所以强烈建议使用最新的内核源代码。 LXC 在资源管理方面依赖 Linux 内核的 CGroups (Control Groups) 系统,CGroups 系统是 Linux 内核提供的一个基于进 程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。它最初由 Google 的工程师提出,后来被整合进 Linux 内核。CGroups 也是 LXC 为实现虚拟化所使用的资源管理手段,可以说没有 CGroups 就没有 LXC。

CDH 支持基于 CGroups 或者 Linux 容器进行静态资源隔离,保证不同应用、不同任务之间的资源使用独立性。

CM 提供了静态服务的监控和运维界面,能方便的查看和管理静态服务池。

CDH yarn 资源抢占 cdh资源队列配置_静态资源_16


CDH yarn 资源抢占 cdh资源队列配置_大数据_17

在 CM 中的静态服务池集成了可视化的界面,可以对 CPU、IO、内存等资源进行静态的隔离。

在企业中一般这样设置,如果有spark给个20%

CDH yarn 资源抢占 cdh资源队列配置_静态资源_18