5.2.Capacity Scheduler(Yahoo)
针对多用户调度,Capacity Scheduler采用的方法稍有不同。集群由很多队列组成(类似于Fair Scheduler的任务池,这些队列可能是层次结构的(因此,一个队列可能是另一个队列的孩子),每个队列有一个分配能力。这一点与Fair Scheduler类似,只不过在每个队列内部,作业根据FIFO方式进行调度。本质上,Capacity Scheduler允许用户或组织(使用队列进行定义)为每个用户或组织模拟一个独立的使用FIFO Scheduler的MapReduce集群。相比之下,Fair Scheduler强制每个池内公平共享,使运行的作业共享池的资源。
1、能力(容量)调度器特性:
计算能力保证。支持多个队列,某个作业可被提交到某一个队列中。每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源。
灵活性。mapreduce的工作原理空闲资源会被分配给那些未达到资源使用上限的队列,当某个未达到资源的队列需要资源时,一旦出现空闲资源,便会分配给他们。
支持优先级。队列支持作业优先级调度(默认是FIFO)。
多重租赁。综合考虑多重约束防止单个作业、用户或者队列独占队列或者集群中的资源。
基于资源的调度。支持资源密集作业,允许作业使用的资源量高于默认值,进而可容纳不同资源需求的作业。不过,当前仅支持内存资源的调度。
2、能力调度器算法分析
涉及到的变量:在capacity中,存在三种粒度的对象,分别是:queue、job和task,他们均需要维护的一些信息:
①Queue维护的信息:
QueueName:queue名称;
UlMin:每个用户的可用的最少资源量(所有用户均相同),需用户在配置文件中指定;
CapacityPercent:计算资源比例,需用户在配置文件中指定;
NumJobsByUser:每个用户的作业量,用以跟踪每个用户提交的作业量,并进行数量的上限限制;
该队列中map或reduce task的属性:
Capacity:实际的计算资源量,这个随着TaskTracker中slot数目变化(用户可能在添加或减少机器节点)而动态变化,大小为:capacityPercent*mapClusterCapacity/100;
numRunningTasks:正在running的task数目;
numSlotsOccupied:正在running的task占用的slot总数,注意,在capacity Scheduler中,running task与slot不一定是一一对应的,每个task可获取多个slot,这主要是因为该调度支持内存资源调度,某个task可能需要多个slot包含的内存量。
numSlotsOccupiedByUser:每个用户的作业占用slot总数,用以限制用户使用的资源量。
②job维护的信息
priority:作业优先级,分为五个等级,从大到小依次为:very_high,high,normal,low,very_low;
numMapTasks/numReduceTasks:job的map/reduce task总数;
runningMapTasks/runningReduceTasks:job正在运行的map/reduce task数量
finishMapTasks/finishedReduceTasks:job已完成的map/reduce task数
③task维护的信息
task开始运行时间,当前状态等。
3、能力调度算法
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-37299-11.html
你他喵的事看热闹不嫌事大
真空包装
感动