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 ...
随机推荐
- [原]Water Water Union-Find Set & Min-Spanning Tree Problems' Set~Orz【updating...】
[HDU] 1213 - How Many Tables [基础并查集,求父节点个数] 1856 -More is better [基础并查集,注意内存,HDU数据水了,不用离散化,注意路径压缩的方式 ...
- Ubuntu 12.04 LTS(64bit) 环境下JDK、 Eclipse、 ADT、 快捷图标
一.在FriendlyARM,Tiny4412,,安装包下可补充: (按照手册添加openjdk-6-jdk 后) 安装JDK (Java),选择需要的JDK,或者全部安装. a) OpenJDK-6 ...
- java中final关键字
一.final修饰方法 禁止任何继承类修改它的定义,保证在继承中使方法行为保持不闲并且不会被覆盖. final修饰的方法,同意编译器针对该方法的调用转为内嵌调用.(类似c++ 中的inline?) p ...
- [ionic开源项目教程] - 第15讲 ionic用户个人中心登录注册的实现
第15讲 ionic用户个人中心登录注册的实现 这一讲包括登陆.注册.个人中心.个人资料页面的实现. 在一讲的改动有四个地方: 在config.js里配置接口地址 完善个人中心的服务层(service ...
- 记一次高级java工程师职位的面试
阿里在业内做java方面的有关开发可谓是一流的.它给我的第一印象,就是办事效率很高. 周日简历发过去,周一电话就打过来了,接到电话后,面试官很客气,问现在方面吗,我说现在在上班,有点忙,然后和面试官约 ...
- Tyvj 1085 派对
这道题和HDU 1016的素数环那道题很相似. 虽然1A了,但写代码的过程中还是丢三落四的. 贴完代码闪人,嘿嘿 //#define LOCAL #include <iostream> # ...
- asp.net限时发送手机验证码
html代码 <p> <strong>手机验证码:</strong> <asp:TextBox ID="code" runat=" ...
- PHP无法加载MySQL模块
在 将PHP根目录下libmysql.dll复制到c:\Windows\system32中 在Apache目录中的conf\httpd.conf 中加载libmysql.dll ...
- 今天发现猎豹浏览器的一个大坑 Request.IsAuthenticated 一直为 false;另外附加原因以及临时的解决方法
今天掉到了一个大坑里面,爬了1个多小时才发现不是代码的问题,居然是浏览器的问题… 下面是问题的发生过程 单点登陆 有2个站点 http://a.abc.com http://b.abc.com ...
- UITableView中的(NSIndexPath *)indexPath
indexPath 用来指示当前单元格,它的row方法可以获得这个单元格的行号,section方法可以获得这个单元格所处的区域号