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

最新文章

  1. 使用批处理(bat)脚本对目录树下同种性质的目录或文件进行处理
  2. 解决debian中脚本无法使用source的问题
  3. Java自增原子性问题(测试Volatile、AtomicInteger)
  4. C# 启动外部程序的几种方法
  5. Spring 的@Controller 和@RestController的区别
  6. exit() die return 的区别
  7. Big Number(大数)
  8. [Android]BaseExpandableListAdapter实现可折叠列表
  9. sybase 修改用户密码
  10. PAT (Advanced Level) 1063. Set Similarity (25)
  11. 完美结合 Redux 与 React-router (react-router不切换页面)
  12. 再起航,我的学习笔记之JavaScript设计模式21(命令模式)
  13. UE4使用UMG接口操作界面
  14. Android开发——EditText的属性使用
  15. windows下配置maven
  16. Qt自定义滚动条(不使用样式表)
  17. The client and server cannot communicate, because they do not possess a common algorithm
  18. C语言程序设计II—第四周教学
  19. 在Android中通过Intent使用Bundle传递对象
  20. Cocos2d-x3.0下实现循环列表

热门文章

  1. cmd命令行指定系统延迟关机时间
  2. Java API —— 编码 & IO流( InputStreamReader & OutputStreamWriter & FileReader & FileWriter & BufferedReader & BufferedWriter )
  3. Maven基本操作命令
  4. 【原创】30分钟入门 github
  5. GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别
  6. POJ 3252 Round Numbers(组合)
  7. BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)
  8. Jquery的.post说解
  9. 函数mem_pool_fill_free_list
  10. uva11181Probability|Given