Hadoop学习之--Capaycity Scheduler源码分析
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
最新文章
- 使用批处理(bat)脚本对目录树下同种性质的目录或文件进行处理
- 解决debian中脚本无法使用source的问题
- Java自增原子性问题(测试Volatile、AtomicInteger)
- C# 启动外部程序的几种方法
- Spring 的@Controller 和@RestController的区别
- exit() die return 的区别
- Big Number(大数)
- [Android]BaseExpandableListAdapter实现可折叠列表
- sybase 修改用户密码
- PAT (Advanced Level) 1063. Set Similarity (25)
- 完美结合 Redux 与 React-router (react-router不切换页面)
- 再起航,我的学习笔记之JavaScript设计模式21(命令模式)
- UE4使用UMG接口操作界面
- Android开发——EditText的属性使用
- windows下配置maven
- Qt自定义滚动条(不使用样式表)
- The client and server cannot communicate, because they do not possess a common algorithm
- C语言程序设计II—第四周教学
- 在Android中通过Intent使用Bundle传递对象
- Cocos2d-x3.0下实现循环列表
热门文章
- cmd命令行指定系统延迟关机时间
- Java API —— 编码 &; IO流( InputStreamReader &; OutputStreamWriter &; FileReader &; FileWriter &; BufferedReader &; BufferedWriter )
- Maven基本操作命令
- 【原创】30分钟入门 github
- GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别
- POJ 3252 Round Numbers(组合)
- BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)
- Jquery的.post说解
- 函数mem_pool_fill_free_list
- uva11181Probability|Given