原创

yarn Preemption 抢占调研

Yarn 作为 Hadoop 的资源调度管理器,为整个集群所有用户、所有 App 分配资源。


ResourceManager 获得每个 NodeManager 发送的心跳信息,就可以知道每个 NodeManager 上有多少 container、application 在运行,空闲的资源(memory, vcpu) 还有多少。空闲的资源就可以分配给不同的应用。

ResourceManager 主要有两种方式来分配:

  1. 共享整个资源池。每个提交的应用都可以享受整个集群的资源。但是这样对资源的控制力度太小,比如,当某个用户不断提交应用,会使其他用户根本无法提交。

  2. 细分成小资源池。将整个大的资源池划分成小的资源池,每个资源池设置不同的资源持有量。为不同的用户指定不同的资源池。再限制每个池,每个用户的最大提交应用数,这样就很好地控制资源。

目前 DI 采用第二种方式。每个应用提交到不同的 Pool,这个 Pool 里的资源就是可以分配给该应用的最大资源。


各BU之间job提交不固定,上下波动大,整个集群的资源使用率仅能达到80%上下,无法更高效的使用集群资源,造成了剩下的20%左右的资源浪费。

考虑开启资源抢占模式,目前就测试情况看存在两个问题:

1、设置抢占后,集群并不能保证minResources这部分资源一直保留,pool为空时,也会释放这部分资源;

2、抢占资源量不可控

 

资源调度策略(DI采用FIFO):

SchedulingPolicy: (1) fairshare/DRF, choose the Child Schedulable that is most over its fair share; (2) FIFO, choose the child Schedulable that is latest launched.Inside each application, we further prioritize preemption by choosing containers with lowest priority to preempt.

 

问题1 , 设置抢占后,当设置的minResources抢占超时(5s)或已低于其公平份额的公平份额抢占超时阈值,yarn会检查需要抢占的任务队列。如果这样的队列存在多少任务,计算每种类型需要被抢占,然后选择正确的使用优先任务。


 

问题2 ,可考虑设置浮动百分比的参数:yarn.scheduler.fair.preemption.cluster-utilization-threshold ,float,  默认0.8

  FairSchedulerConfiguration.java   

 

c-3.png

FairScheduler.java :
 

   c-4.png

 

测试

FAT环境,设置preemption=true,minResources=oldMaxResources,maxResources = oldResource*(1+10%)  : 咱设置10%浮动;

1.png


测试账号及脚本,资源分配:

账号:op1

脚本:select count(*) from freeway_log where month=1 and dt=20140806 ;

资源:

2.png


账号:dbcenter 
脚本:select count(1) from sharedatadb.suricata_dns where data_date=2015-05-28/data_hour=8;

资源:

3.png

 

账号:bihtl
脚本:select count(1) from tmp_htldb.weixinpagedata_tmp where d=2014-05-20;

资源:

4.png


账号:skysea
脚本:select count(1) from dw_ubtdb.pageview where d=2014-06-23;

资源:

5.png


测试结果:

1、多账号同时跑job,均可正常执行;

2、计算量最少的job先提交,所有脚本可成功运行;

3、计算量最大的job先提交,所有脚本可成功提交;


资源抢占量最大浮动可控,不会出现资源被某pool抢占后其他账号无资源的情况:

6.png


正在执行较大数据查询测试:从生产环境搬4个账号下的20GB数据到FAT。

不重启yarn-resourcemanager 服务测试:

MX7P$AIUO$N~VZZ4EFCM)82.png

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

  1. #1

    无极天尊 (2017/08/30 16:42:07)回复
    太高端,现在还没学习hadoop,以后或许会遇到

分享:

支付宝

微信