Hadoop学习之--Capaycity Scheduler源码分析
来源:互联网 发布:英菲克网络机顶盒老卡 编辑:程序博客网 时间:2024/05/22 12:53
Capacity Scheduler调度策略当一个新的job是否允许添加到队列中进行初始化,判断当前队列和用户是否已经达到了初始化数目的上限,下面就从代码层面详细介绍整个的判断逻辑。Capaycity添加一个job,会通过注册的监听器org.apache.hadoop.mapred.JobQueuesManager向队列中添加JOB,添加JOB过程中会检查当前队列和用户是否已经达到资源上限了。
下面详细的从源码角度介绍判断的条件:
队列的相关的上限判断条件:(queueWaitingJobs + queueInitializingJobs + queueRunningJobs) >= maxJobsToAccept
用户的相关上限判断条件:(userWaitingJobs + userInitializingJobs + userRunningJobs) >= maxJobsPerUserToAccept
其中queueWaitingJobs和userWaitingJobs分别为队列和用户等待初始化的JOB数目,queueInitializingJobs和userInitializingJobs分别为队列和用户已经初始化的JOB数目,queueRunningJobs和userRunningJobs分别为队列和用户正在运行的JOB数目,waitingJobs,initializingJobs,runningJobs三个数据在CapacitySchedulerQueue中分别定义了三个MAP容器来存放和参与计数计算的。
下面着重介绍上限值maxJobsToAccept 和 maxJobsPerUserToAccept 计算方式,详细代码为:
Int maxJobsToInit = (int)Math.ceil(maxSystemJobs * capacityPercent/100.0); int maxJobsPerUserToInit = (int)Math.ceil(maxSystemJobs * capacityPercent/100.0 * ulMin/100.0); int jobInitToAcceptFactor = conf.getInitToAcceptJobsFactor(queueName); int maxJobsToAccept = maxJobsToInit * jobInitToAcceptFactor; int maxJobsPerUserToAccept = maxJobsPerUserToInit * jobInitToAcceptFactor;
涉及变量取值为:
maxSystemJobs = mapred.capacity-scheduler.maximum-system-job
capacityPercent = mapred.capacity-scheduler.queue.xxx.capacity
ulMin = mapred.capacity-scheduler.queue.xxx.minimum-user-limit-percent,值为100意味着没有限制。
jobInitToAcceptFactor = mapred.capacity-scheduler.queue.xxx.init-accept-jobs-factor,如果配置的越大,那么允许被初始化作业的量就越大。
队列上限值maxJobsToAccept是由maxJobsToInit和jobInitToAcceptFactor的乘积得到的,maxJobsToInit是根据参数mapred.capacity-scheduler.queue.xxx.capacity来控制的,所以队列中JOB数量的上限值,直接受参数mapred.capacity-scheduler.queue.xxx.capacity和mapred.capacity-scheduler.queue.xxx.init-accept-jobs-factor影响;用户JOB数量上限值还跟参数mapred.capacity-scheduler.queue.xxx.minimum-user-limit-percent相关联,通过代码中maxJobsPerUserToInit值的计算可以直观的判断出,此参数是个百分比,值越低,那么上限值就越低。
结论:
作业数目的上限根据所分配的队列容量mapred.capacity-scheduler.queue.xxx.capacity以及mapred.capacity-scheduler.queue.xxx.init-accept-jobs-factor来决定,在用户层面上还有一个百分比的参数mapred.capacity-scheduler.queue.xxx.minimum-user-limit-percent来影响上限数目的计算。
欢迎加入Hadoop技术群进行交流:147681830
- Hadoop学习之--Capaycity Scheduler源码分析
- Hadoop学习之--Capaycity Scheduler配置参数说明
- Hadoop学习之--Fair Scheduler作业调度分析
- Quartz源码分析之Scheduler
- Spark源码分析之-scheduler模块
- Spark源码分析之-scheduler模块
- Spark源码分析之-scheduler模块
- Spark源码分析之-scheduler模块
- Spark源码分析之Scheduler模块(TaskScheduler)
- Spark Scheduler模块源码分析之DAGScheduler
- Spark源码分析之-scheduler模块
- Spark Scheduler模块源码分析之DAGScheduler
- Spark源码分析之Scheduler模块(TaskScheduler)
- Spark Scheduler模块源码分析之DAGScheduler
- Spark源码分析之Scheduler模块(TaskScheduler)
- Kubernetes Scheduler源码分析
- 源码分析参考:Scheduler
- Storm-源码分析- Scheduler (backtype.storm.scheduler)
- OpenCart之联系我们contact us页面提交时邮件错误
- hadoop2.2.0单机安装(记录)
- IE7 float:right 时元素换行 的bug解决方法
- 怎样让自己的程序进程不让别人强行关闭掉
- php 生成中文验证码
- Hadoop学习之--Capaycity Scheduler源码分析
- jq遮罩层插件
- iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
- Intent 最全用法总结
- ibatis 2.0分页方式的改进
- jQuery验证控件jquery.validate.js使用说明+中文API
- struts2:jsp前台传参至后台action
- hdu 1269 迷宫城堡 (Kosaraju+缩点)
- hadoop误删除文件恢复的方法