Hadoop学习之--Fair Scheduler作业调度分析
Fair Scheduler调度器同步心跳分配任务的过程简单来讲会经历以下环节:
1、 对map/reduce是否已经达到资源上限的循环判断
2、 对pool队列根据Fair算法排序
3、然后循环pool队列,在pool中的job队列根据Fair算法排序,循环job,选择task
4、如果选择到一个task,跳出pool的循环,然后重新对pool排序,重复步骤2
Fair Scheduler调度策略对于pool和job的调度算法都是一致的,先解释在调度算法中的几个重要变量:
minshare : Minimum share slots assigned to the schedulable 最小共享量,pool池的最小共享量为每个资源池需要分配的最小的map或reducer slots数,也就是配置文件中的minMaps或minReduces,Job的minShare定义为0
demand : This is defined as number of currently running tasks + number of unlaunched tasks (tasks that are either not yet launched or need to be speculated)。简单概括就是JOB的slot需求量,其结果通过(正在运行的Tasks数量 + 未运行的Tasks数量)计算得出,pool池的demand是池中所有Job的demand之和。FairScheduler会启动一个UpdateThread线程来定时更新Demand值,更新间隔可以通过mapred.fairscheduler.update.interval配置,未配置或默认情况下是2500毫秒
runningTasks: 正在运行的Tasks数量,pool池的runningTasks值等于之中所有job的runningTasks之和。
weight:权重。Pool的权重为配置文件中weight配置项,job的权重为和优先级相关,例如normal=1.0,high=2.0,very high=4.0等,但是job的权重在运行过程中还会重算,如果开启了mapred.fairscheduler.sizebasedweight配置项,那么weight会重新计算:
weight = Math.log1p(demand) / Math.log(2); weight *= getPriorityFactor(job.getPriority());
也就是说job权重会随着job的slot需求量的变化而变化。如果开启了mapred.fairscheduler.weightadjuster配置项,那么weight的计算还会得到重新计算,Weightadjuster还需要配合mapred.newjobweightbooster.factor和mapred.newjobweightbooster.duration两个配置项来使用,factor为权重因子,duration为权重期限,如果满足:【当前时间(currentTime)-jobStartTime < duration】也就是说还在权重调整期限内,那么weight = weight*factor。
Fair Scheduler核心思想就是为了让尽可能保证所有的作业都能够获得等量的资源份额,首先会考虑作业的资源亏欠度来选择作业,然后才是考虑优先级,所谓资源亏欠度大体上可以理解为所得到的资源和当前所需资源的比值,下面就详细介绍Fair Scheduler核心调度算法,本质上其实就是对pool或job进行一定规则的排序操作,过程如下:
1、 先计算job的minShare,minShare等于minShare和demand值两者取小
2、 判断runningTasks是否小于minShare,如果是的话,优先级高
3、 步骤2不满足的话,那么判断runningTasks/max(mindshare,1.0)的值,值小的优先
4、 如果步骤3中的runningTasks/max(mindshare,1.0)值一样,判断runningTasks/weight的值,前面讲到如果开启了sizebasedweight配置项,那么作业就会随着作业的运行过程不断的变化其weight权重值,对于大作业权重值的变化曲线会类似于一个抛物线。
5、 如果权重值还一致,最后对比startTime值。
欢迎加入Hadoop技术群进行交流:147681830
Hadoop学习之--Fair Scheduler作业调度分析的更多相关文章
- Hadoop学习之--Capaycity Scheduler源码分析
Capacity Scheduler调度策略当一个新的job是否允许添加到队列中进行初始化,判断当前队列和用户是否已经达到了初始化数目的上限,下面就从代码层面详细介绍整个的判断逻辑.Capaycity ...
- Hadoop学习笔记—20.网站日志分析项目案例
1.1 项目来源 本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖.回帖,如图1所示. 图1 项目来源网站-技术学习论坛 本次实践的目的就在于 ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...
- Hadoop学习之--Capaycity Scheduler配置参数说明
以下列举出来的是capacity关于queue和user资源使用量相关的参数说明: mapred.capacity-scheduler.queue.xxx.capacity: 队列的资源容量百分比,所 ...
- Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler)
分析
转会http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html? ca=drs-cn-0125 ...
- Fair Scheduler中的Delay Schedule分析
延迟调度的主要目的是提高数据本地性(data locality),减少数据在网络中的传输.对于那些输入数据不在本地的MapTask,调度器将会延迟调度他们,而把slot分配给那些具备本地性的MapTa ...
- 学习Hadoop+Spark大数据巨量分析与机器学习整合开发-windows利用虚拟机实现模拟多节点集群构建
记录学习<Hadoop+Spark大数据巨量分析与机器学习整合开发>这本书. 第五章 Hadoop Multi Node Cluster windows利用虚拟机实现模拟多节点集群构建 5 ...
随机推荐
- HDU 1054:Strategic Game
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 彻底搞清javascript中this, constructor, prototype
说起这三个属性,肯定有一些同学和我一样,初学js时非常困惑,头大,一脸的迷茫.今天就来给大家彻底解决这些担心受怕的问题. 先看this this定义: this就是函数赖以执行的对象. 分析这句话: ...
- python-unexpected content storage modification出错
提示以上错误,然后在pycharm中的文件内容和实际内容不一致 去我的文档-.PyCharm-system_cache,全部删除
- EF5&MVC4 学习1、创建新的Contoso University Application,并创建Model Class 生成对应的database
参考:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/creating-an-entity-framewo ...
- c#快捷键大全
转发:http://zhidao.baidu.com/question/444655283 直接贴出来吧(关于VS的): 快捷键 功能 CTRL + SHIFT + B生成解决方案 CTRL + F7 ...
- HDU 1698 (线段树 区间更新) Just a Hook
有m个操作,每个操作 X Y Z是将区间[X, Y]中的所有的数全部变为Z,最后询问整个区间所有数之和是多少. 区间更新有一个懒惰标记,set[o] = v,表示这个区间所有的数都是v,只有这个区间被 ...
- nodejs开发阶段利器supervisor
在开始学习nodejs时,往往一般写代码,一边看效果.先停止node,再重新运行.非常耗时. 这时supervisor派上了用场. 安装 推荐使用npm,本人一直使用局部安装,这样可以将全部文件安装在 ...
- MySQL多表连接
主要分3种:内连接,外连接,交叉连接 其 他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 = 或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...
- 实验室 Linux 集群的管理常用命令
实验室有一个Linux集群,本文做一下记录. SSH相关命令 通过SSH登录集群中的其他机器上的操作系统(或虚拟机中的操作系统).操作系统之间已经设置免密码登录. 1. 无选项参数运行 SSH 通常使 ...
- Android数据库一些源码分析
对于批量数据插入这种最常见的情况来说,我们来看两种实现方式(两种都用了事务). 下面这种应该是最多人使用的插入数据的方法: public long addByExec(List<Person&g ...