hadoop作业调度策略
一个Mapreduce作业是通过JobClient向master的JobTasker提交的(JobTasker一直在等待JobClient通过RPC协议提交作业),JobTasker接到JobClient的请求后把其加入作业队列中。
DataNode节点的TaskTracker一直通过RPC(RPC--远程过程调用协议它是一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议)向JobTasker发送heartbeat询问有没有任务做,如果有则让其派发任务过来,TaskTracker在其本地发起Task,执行任务。
作业调度策略有三种:
1、默认调度算法--FIFO队列策略:
hadoop默认调度器,它先按照作业优先级的高低,再按照到达时间的先后来选择被执行的作业。
优点:调度算法简单,JobTracker工作负担轻。
缺点:忽略了不同作业的需求差异。例如如果类似于对海量数据进行统计分析的作业长期占据计算资源,那么在其后提交的交互型作业有可能迟迟得不到处理,从而影响用户体验。
2、计算能力调度算法Capacity Scheduler(Yahoo 开发)
(1)Capacity Scheduler 中可以定义多个作业队列,作业提交时将直接放入到一个队列中,每个队列中采用的调度策略是FIFO算法。
(2)每个队列都可以通过配置获得一定数量的task tracker资源用于处理map/reduce操作,调度算法将按照配置文件为队列分配相应的计算资源量。
(3)该调度默认情况下不支持优先级,但是可以在配置文件中开启此选项,如果支持优先级,调度算法就是带有优先级的FIFO。
(4)不支持优先级抢占,一旦一个工作开始执行,在执行完之前它的资源不会被高优先级作业所抢占。
(5)对队列中同一用户提交的作业能够获得的资源百分比进行了限制以使同属于一用户的作业不能出现独占资源的情况.
Capacity Scheduler内存管理
Capacity Scheduler能有效地对hadoop集群的内存资源进行管理,以支持内存密集型应用。作业对内存资源需求高时,调度算法将把该作业的相关任务分配到内存资源充足的task tracker上。在作业选择过程中,Capacity Scheduler会检查空闲的tasktracker上的内存资源是否满足作业要求。Tasktracker上的空闲资源(内存)数量值可以通过tasktracker的内存资源总量减去当前已经使用的内存数量得到,而后者包含在tasktracker向jobtracker发送的周期性心跳信息中。
配置Capacity Scheduler
步骤:
1、cd $HADOOP_HOME/contrib/capacity-scheduler
2、cp hadoop-capacity-scheduler-0.20.2-cdh3u2.jar $HADOOP_HOME/lib
配置$HADOOP_HOME/conf下的map-site.xml,增加
<property>
<name>map.jobtracker.taskScheduler</name>
3 <value>org.apache.hadoop.mapred.CapacityTaskScheduler</value> <!--这个就是刚才拷过去的jar里面的类-->
</property>
<property>
<name>mapred.queue.names</name> <!--定义队列-->
<value>default,bean</value><!--两个队列一个default(默认)bean队列-->
</property> <!--修改$HADOOP_HOME/conf下cpacity-scheduler.xml增加属性如下-->
<property>
<name>mapred.capacity-scheduler.queue.default.capacity</name>
<vaule>100</value>
</property>
<property>
<name>mapred.capacity-schelduler.queue.bean.capacity</name>
<value>100</value>
</property>
选择队列(执行前需要做):
set mapred.job.queue.name = bean(对列的名字)
3、公平份额调度算法Fair Scheduler(Facebook开发)
Facebook要处理生产型作业(数据统计分析,hive)、大批处理作业(数据挖掘、机器学习)、小型交互型作业(hive查询),不同用户提交的作业型在计算时间、存储空间、数据流量和相应时间上都有不同需求。为使hadoop mapreduce框架能够应对多种类型作业并行执行,使得用户具有良好的体验,Facebook公司提出该算法。
Fair Scheduler调度中,只有一个作业执行时,它将独占集群所有资源。有其他作业被提交时会有TaskTracker被释放并分配给新提交的作业,以保证所有的作业都能够获得大体相同的计算资源。
作业池:
为每一个用户建立一个作业池,用户提交的作业将会放进一个能够公平共享资源的pool(池)中,每个作业池设定了一个最低资源保障,当一个池中包含job时,它至少可以获得minmum share的资源(最低保障资源份额机制)。
池中的作业获得一定份额的资源,可以通过配置文件限制每个池中作业数量,缺省情况下,每个作业池中选择将要执行的作业的策略是FIFO策略,先按照优先级高低排序,然后再按照提交时间排序。
Deficit(赤字,不足):
Fair Scheldure为每个作业定义了一个deficit指标,Deficit是一个作业在理想情况下的获得的计算资源和实际中获得的计算资源之间的差距。Fair Scheduler会每隔几百毫秒观察每个作业有多少任务已经在这个时间间隔内执行,并将结果与它的资源份额比较,一更新该作业的deficit值。一旦有空闲的task tracker出现,首先分配给当前具有最高deficit值得作业。
例如:如果系统中存在着尚未获得最低资源保障的作业池,那么该池中的作业将会优先调度,而选择池中的作业需要根据他们的deficit来决定。这样做是为了尽可能满足作业池最低保障资源份额的限制。
配置:
cd $HADOOP_HOME/contrib/fairscheduler
cp *.jar $HADOOP_HOME/lib
注:一般版本里,lib下包含这个包
配置$HADOOP_HOME/conf下的map-site.xml,增加
<property>
<name>mapred.jobtracker.taskScheduler</name> <!--加载jar包中的类-->
<value>org.apache.hadoop.mapred.FairScheduler</value>
</property>
<property>
<name>mapred.fairscheduler.allocation.file</name>
<value>$HADOOP_HOME/conf/fair-scheduler.xml</value>
</property>
<property>
<name>mapred.queue.names</name><!--定义队列-->
<value>default,bean</value><!--两个池一个default(默认)bean池-->
</property>
<!--加上这么一个-->
<property>
15 <name>mapred.fairscheduler.preemption</name>
<value>true</value>
</property>
fair-schelduler.xml根据文件里面给的例子配置就可以了。
选择队列(执行前需要做):set mapred.job.queue.name = bean(池的名字)
注:配置可能会出错,可能是不能用$HADOOP_HOME把它改问绝对路径。
hadoop作业调度策略的更多相关文章
- 【hadoop代码笔记】hadoop作业提交之汇总
一.概述 在本篇博文中,试图通过代码了解hadoop job执行的整个流程.即用户提交的mapreduce的jar文件.输入提交到hadoop的集群,并在集群中运行.重点在代码的角度描述整个流程,有些 ...
- Hadoop作业提交之TaskTracker获取Task
[Hadoop代码笔记]Hadoop作业提交之TaskTracker获取Task 一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobC ...
- Spark和Hadoop作业之间的区别
Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么在内部实现Spark和Hadoop作业模型都一样吗?答案是不对的. 熟悉Hadoop的人应该都知道 ...
- 【Hadoop代码笔记】Hadoop作业提交之TaskTracker获取Task
一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobClient提交的作业,并进行初始化.本文着重描述,JobTracker如何选择作业 ...
- 大数据 --> Spark和Hadoop作业之间的区别
Spark和Hadoop作业之间的区别 熟悉Hadoop的人应该都知道,用户先编写好一个程序,我们称为Mapreduce程序,一个Mapreduce程序就是一个Job,而一个Job里面可以有一个或多个 ...
- hadoop作业调优参数整理及原理
hadoop作业调优参数整理及原理 10/22. 2013 1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并 ...
- Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
作者: Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Had ...
- Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议
作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hado ...
- Hadoop作业JVM堆大小设置优化 [转]
前段时间,公司Hadoop集群整体的负载很高,查了一下原因,发现原来是客户端那边在每一个作业上擅自配置了很大的堆空间,从而导致集群负载很高.下面我就来讲讲怎么来现在客户端那边的JVM堆大小的设置.我们 ...
随机推荐
- 使用Metrics监控应用程序的性能
在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对 ...
- Vue插件开发入门
相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...
- 在网上摘录一段对于IOC的解析,比较直观,大家观摩观摩
其实IoC非常简单,基本思想就是面向接口的编程,只是老外给起了个名字名充分利用之. 简单的说,传统模式下,如果你要用钱,你需要去银行取,IoC模式下,银联在你家安了一个取款机,你直接找取款机要钱就可以 ...
- .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用.由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所 ...
- [C#] Linq To Objects - 如何操作字符串
Linq To Objects - 如何操作字符串 开篇语: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述>(90+赞) 社会反响不错,但自己却始终觉得缺点什么!“纸上得来 ...
- 设计模式(六):控制台中的“命令模式”(Command Pattern)
今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...
- 你真的会玩SQL吗?让人晕头转向的三值逻辑
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 你真的会玩SQL吗?透视转换的艺术
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- python中的str,unicode和gb2312
实例1: v1=u '好神奇的问题!?' type(v1)->unicode v1.decode("utf-8")# not work,because v1 is unico ...
- 【中文分词】二阶隐马尔可夫模型2-HMM
在前一篇中介绍了用HMM做中文分词,对于未登录词(out-of-vocabulary, OOV)有良好的识别效果,但是缺点也十分明显--对于词典中的(in-vocabulary, IV)词却未能很好地 ...