hadoop作业调度策略
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)CapacityScheduler中可以定义多个作业队列,作业提交时将直接放入到一个队列中,每个队列中采用的调度策略是FIFO算法。
(2)每个队列都可以通过配置获得一定数量的tasktracker资源用于处理map/reduce操作,调度算法将按照配置文件为队列分配相应的计算资源量。
(3)该调度默认情况下不支持优先级,但是可以在配置文件中开启此选项,如果支持优先级,调度算法就是带有优先级的FIFO。
(4)不支持优先级抢占,一旦一个工作开始执行,在执行完之前它的资源不会被高优先级作业所抢占。
(5)对队列中同一用户提交的作业能够获得的资源百分比进行了限制以使同属于一用户的作业不能出现独占资源的情况.
CapacityScheduler内存管理
CapacityScheduler能有效地对hadoop集群的内存资源进行管理,以支持内存密集型应用。作业对内存资源需求高时,调度算法将把该作业的相关任务分配到内存资源充足的tasktracker上。在作业选择过程中,CapacityScheduler会检查空闲的tasktracker上的内存资源是否满足作业要求。Tasktracker上的空闲资源(内存)数量值可以通过tasktracker的内存资源总量减去当前已经使用的内存数量得到,而后者包含在tasktracker向jobtracker发送的周期性心跳信息中。
配置CapacityScheduler
步骤:
1、cd$HADOOP_HOME/contrib/capacity-scheduler
2、cphadoop-capacity-scheduler-0.20.2-cdh3u2.jar$HADOOP_HOME/lib
配置$HADOOP_HOME/conf下的map-site.xml,增加
dsadasdsa
12 map.jobtracker.taskScheduler 3 org.apache.hadoop.mapred.CapacityTaskScheduler 4 56 mapred.queue.names 7 default,bean 8 9 10 1112 mapred.capacity-scheduler.queue.default.capacity 13 100 14 1516 mapred.capacity-schelduler.queue.bean.capacity 17 100 18
选择队列(执行前需要做):
setmapred.job.queue.name=bean(对列的名字)
3、公平份额调度算法FairScheduler(Facebook开发)
Facebook要处理生产型作业(数据统计分析,hive)、大批处理作业(数据挖掘、机器学习)、小型交互型作业(hive查询),不同用户提交的作业型在计算时间、存储空间、数据流量和相应时间上都有不同需求。为使hadoopmapreduce框架能够应对多种类型作业并行执行,使得用户具有良好的体验,Facebook公司提出该算法。
FairScheduler调度中,只有一个作业执行时,它将独占集群所有资源。有其他作业被提交时会有TaskTracker被释放并分配给新提交的作业,以保证所有的作业都能够获得大体相同的计算资源。
上一篇: iOS - UIButton按钮发生事件
下一篇: C++ 基础知识讲解之虚函数和纯虚函数