Fork me on GitHub

CDH| Yarn资源队列划分管理

 

Yarn用户资源隔离配置,主要使用 Yarn动态资源池(dynamic resource pool) _ 对YARN应用程序进行资源和策略分配的池。(Impala资源也可以动态管理)_
动态资源池允许安排和分配用户访问特定池,用来执行YARN应用程序。如果一个池的资源未被使用,它可以被占用(preempted)并分配给其他池。否则,就根据各个池的权重来共享资源。访问控制列表(Access control lists (ACLs)) 对提交访问和管理访问进行限制。

现阶段集群资源使用没有进行明确的划分,业务线与业务线之间任务存在挣抢资源的情况,为了解决这种问题,需要对集群做资源划分和用户划分,使用的集群为cdh集群,cdh集群已经集成了动态资源池,所以我们也直接采用cdh的资源配置方式进行规划。

划分的目的为针对不同业务、不同用户、不同需求、不同场景的使用,对yarn任务资源池进行规划和分配,达到资源的管控和隔离,避免各个任务之间产生影响,保证生产环境任务运行稳定。

1、 yarn资源队列参数设置:

  (1) yarn.scheduler.fair.user-as-default-queue   false

 

  (2) yarn.scheduler.fair.allow-undeclared-pools   false

 

 2、 CDH 动态资源队列配置入口

 

 

3、 根据用户的资源队列管理

如图,第一步我们划分了2个大的父资源池:

(1) default:默认池,没有划分资源池的用户会提交到default资源池

 

 

 

 

  a.  这里权重为10%,default:users 资源成1:9;

  b.  这里不要设置为父池,一定要保证为叶子节点即子池,不然提交不了任务;

  c.  CPU:c 计划策略这里我采用的都是DRF;

  d.  提交访问控制:配置用户权限,配置哪些用户有权限提交任务,注意用逗号分隔(可默认不配);

  e.  管理访问控制:配置用户对资源池的管理权限,注意用逗号分开(可默认不配);

 

 

 (2) users池:特定用户提交任务到该池

  users池配置跟default基本一样,唯一区别是权限控制所对应用户有所调整:

 3个用户:

 

 比如用户a:

 

(一)   用户划分

用户划分主要是为了对业务线和运行环境进行系统级别的隔离,这里划分了两个用户,分别对应好房和合生通业务线,如下:

用户名

用户目录

备注

a

/home/a

a 业务线用户

b

/home/b

b 业务线用户

hdfs

/var/lib/hadoop-hdfs

大数据公共用户

各个业务线使用对应的用户提交任务,涉及到的脚本/依赖/任务/资源等也统一部署在使用的用户下。

(二)   资源池划分

资源池划分,主要是在yarn队列/集群资源级别做一个隔离,针对上边的用户,划分的资源池情况如下:

资源池名称

父池

备注

适用任务

root

集群根资源池

root.default

root

集群默认资源池

未指定资源池/用户

root.users

root

用户提交任务资源池

各个用户的父池

root.users.hdfs

users

hdfs用户保留资源池

大数据公共资源池

root.users.a

users

( a 资源池 )

a 相关业务

root.users.b

users

( b 资源池 )

b 相关业务

 

 

四、 使用及注意事项

一)Hive任务

各业务线使用对应的用户登陆服务器,运行hive任务默认使用当前用户的资源池,不需要做特殊处理,如需要特别指定运行的资源池,可以通过以下方式设置对应的资源池

SET mapreduce.job.queuename=xxxx    //xxxx资源池名称

 

二)MapReduce任务

提交普通的MR任务,可以通过两种方式使用资源池:

  1. 不指定资源池,提交到当前用户的资源池,如果当前用户的资源池不存在,提交到default资源池.
  2. 指定资源池,需要在提交任务时,指定具体的资源池参数,参数如下:

hadoop jar applincation.jar -D mapreduce.job.queuename=xxxx   //xxxx资源池名称

 

三)Spark任务

Spark任务,在运行时,必须指定要使用的资源池,不然Spark会自动创建资源池,指定资源池的命令如下:

spark-shell --master yarn --queue xxxx   //xxxx资源池名称

spark-submit --master yarn --queue xxxx    //xxxx资源池名称

 

四)Flink任务

Flink任务,在运行时,必须要指定使用的资源池, 指定资源池的参数命令如下:

./bin/flink run application.jar -qu | --queue xxxx    //xxxx资源池名称

 

五、 压力测试

一)  资源池满负载情况

User用中资源已满,图中灰色部分为已经分配使用的资源池,虚线部分为当前保留可用动态使用的资源池。

(二)      任务等待情况

(三)      集群资源使用情况

(四)      各个资源池使用情况

Hst资源池使用情况,可用看到cpu已经分配完毕

Easylife资源池资源已经分配完毕

Hdfs资源池资源已经分配完毕

通过上边一系列情况可用看出,在三个资源池都分配完毕后,任务还是正常运行,没有出现无法提交任务,任务出错等问题.多租户配置方案可用满足我们对资源和运行环境的隔离需求。

 

posted @ 2020-03-21 09:27  kris12  阅读(5228)  评论(0编辑  收藏  举报
levels of contents