Hadoop集群作业的调度研究_第1页
Hadoop集群作业的调度研究_第2页
Hadoop集群作业的调度研究_第3页
Hadoop集群作业的调度研究_第4页
Hadoop集群作业的调度研究_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop集群作业的调度研究ContentsHadoop和MapReduce简介1

Hadoop的集群作业调度原理2如何编写自己的Hadoop调度器4

结论与展望5

Hadoop的集群作业调度算法3ContentsHadoop和MapReduce简介1

Hadoop的集群作业调度原理2如何编写自己的Hadoop调度器4

结论与展望5

Hadoop的集群作业调度算法3

1、Hadoop简介

Hadoop是基于java分布式密集数据处理和数据分析的软件框架

提供了廉价的处理大数据的可能

是开源生态系统,淘宝、腾讯、百度、新浪、facebook、yahoo、amazon、ebay、twitter都在用Hadoop简介各种业务应用hiveDBaseMapReduceHDFShadoop的业界标准核心Hadoop简介各种业务应用hiveDBaseMapReduceHDFShadoop的业界标准核心

简单来说,就是任务的分解和结果的合成。

MapReduce工作原理

MapReduce是用于并行处理大数据的软件框架。计算机集群

MapReduce工作原理

流程如下:任务①分解小任务小任务小任务发送部分信息③传送反馈部分信息部分信息结果④整合HDFS架构简介ContentsHadoop和MapReduce简介1

Hadoop的集群作业调度原理2如何编写自己的Hadoop调度器4

结论与展望5

Hadoop的集群作业调度算法3HadoopMapReduce引擎是由JobTracker和TaskTracker组成,下图是Hadoop的结构。1、HadoopMapReduce引擎2、MapReduce工作机制3、Hadoop调度流程TaskTrackerTaskTrackerTaskTrackerJobTrackerTaskScheduler④assignTasks()⑤tasklist③<TaskTrackerStatus,askForNewTask>⑥tasks-to-lauchTask⑦launch③③Client①submitJob()②notifyinitJob()??????????????

Hadoop作业包含一些map任务和task任务。这些任务在集群的节点的任务槽(slots)上执行。每一个节点根据其计算资源配置有一系列的map任务槽和reduce槽,典型入每个节点cpu的一个核当作一个slot。调度器的任务就是为任何空闲的slot分配任务。所有调度器实际上均采用了三级调度策略,即为空闲的slot依次选择一个队列、作业和任务。队列(queue)用户被划分到某个队列每个队列分配一定量的资源作业(job)提交时间优先级(5个优先级:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW)任务(task)本地性(nodelocality,racklocality)不同调度器,采用策略不同不同调度器,采用策略相同4、Hadoop三级调度ContentsHadoop和MapReduce简介1

Hadoop的集群作业调度原理2如何编写自己的Hadoop调度器4

结论与展望5

Hadoop的集群作业调度算法3传统调度器:FIFO批处理调度器FairScheduler多用户调度器CapacityScheduler多用户调度器新特性调度器:适用于异构负载的调度器

适用于异构集群的调度器LATE适用于实时作业的调度器Constraint-basedScheduler

Hadoop现有调度器

最早的HadoopMap/Reduce计算架构中,JobTracker在进行作业调度时使用的是FIFO(FirstInFirstOut)算法。所有用户的作业都被提交到一个队列中,然后由JobTracker先按照作业的优先级高低,再按照作业提交时间的先后顺序选择将被执行的作业。

FIFO比较简单,hadoop中只有一个作业队列,被提交的作业按照先后顺序在作业队列中排队,新来的作业插入到队尾。一个作业运行完后,总是从队首取下一个作业运行。这种调度策略的优点是简单、易于实现,同时也减轻了jobtracker的负担。但是它的缺点也是显然的,它对所有的作业都一视同仁,没有考虑到作业的紧迫程度,另外对小作业的运行不利。1、FIFO调度器FIFO调度器job1按到达时间排序,先来先服务job2job3job4job5job6job7job8maptask0maptask1maptask2reducetask0reducetask1reducetask2maptask3maptask4maptask5job1queue<hasafreeslot><returnanewtask>FIFO调度器job1按到达时间排序,先来先服务job2job3job4job5job6job7job8maptask1failedTasksmaptask0localitytasksmaptask3non-localitytasksmaptask2maptask4speculativetasksmaptask5job1reducetask0nonRunningReducesreducetask1speculativetasksreducetask22、Fair公平调度器算法设计思想:适用于多用户情形。当集群中由多个用户提交作业时,为了保证公平性,调度器为每个用户或每个UNIXGroup分配一个资源池。资源池里的每个作业都会按照其作业权重分配最小资源共享量以保证每个作业都能得到执行而不至于饥饿。当集群中的某个节点出现空闲的slot时,则选择目前已获得的资源量和理论上应获得的资源量的差值最大的作业来执行,以保证公平。主要特点:支持多用户多队列:资源公平共享(公平共享量有优先级决定):公平调度器按照资源池(pool)来组织作业,并把资源公平地分到这些资源池里。默认情况下,每个用户拥有一个独立的资源池,以使每个用户不管提交多少作业都能获得一份等同的集群资源量。资源池也可以依据一定的权重来获取相应比例的资源份额。资源池实际上也可以称为队列。保证最小共享量:除公平共享,公平调度算法还能为资源池设定其所需的最小共享量,管理员可以给每个pool配置一个最小共享量,调度器在分配资源时,需要保证每个pool中的作业获取该数目的资源。这样确保用户或应用程序总能获取足够的资源,由此可以提高整个系统的资源利用率。支持时间片抢占:公平调度器支持抢占,如果一个池在一定时间内未得到公平地资源分配,调度器就会终止池中得到过多资源的任务,将集群资源让给此资源池。限制作业并发量,防止中间数据塞满硬盘:公平调度算法调度运行所有用户作业,但也可以限定每个资源池中最大并发作业数和每个用户最多提交作业数。如果一次性运行大作业,会导致产生过多的中间记录信息以及过多的上下文切换,这都会影响到作业执行的性能。超过数量的作业将在调度队列中等待,直到一些资源池的早期作业完成。每个资源池对作业的调度方式可以配置,支持两种调度策略,分别为FIFO和公平调度。动态调整各个资源池的资源量:当集群中存在多个资源池时,某些资源池的资源可能用不了,这时调度器会自动将这些资源池中的剩余资源共享给其它所需要的资源池,其它这些资源获取的共享资源多少主要由资源池权重决定,权重越大,获取的资源越多,一个资源池的最小共享量加上其获取的共享资源就是公平共享量。公平调度器的实现—基本概念Pool:资源池,或者作业池。每个pool里有一定量的资源(CPU、内存、网络IO,磁盘等,这些由管理员配置),每个用户属于某个pool,其作业可使用这个pool中的资源,可限定每个pool中最大并发作业数和每个用户最多提交作业数。默认情况下,一个linux用户对应一个pool,而管理员也可以配以一个linuxgroup对应一个pool。pool实际上也可以称为group或者队列。

最小共享量:管理员可给每个pool配置一个最小共享量,调度器在分配资源时,需要保证每个pool中的作业至少获取该数目的资源。一个常见的应用场景是,对产品pool设置最小共享量,而测试pool不设置,这样,当可用资源有限时时,优先保证产品pool有资源可用。公平共享量:当集群中存在多个pool时,某些pool中的资源可能用不了,这时候调度器会自动将这些pool中剩余的资源共享给其他需要的pool,其他这些pool获取的共享资源多少主要由其poolweight决定,poolweight越大,获取的资源越多。一个pool的最小共享量加上其获取的共享资源数目,就是公平共享量。

公平调度器的实现—算法实现

最简单的实现公平共享的方法如下:任何时候当一个slot空闲时,把它分配给运行着最少任务的资源池。这可以保证所有的pool得到相同数量的slot,除非这个pool的需求量(调度器想要执行任务数,等于已经运行的任务数+尚未启动的任务数)比其得到的公平共享量小,这时,该pool多余的slot将会分配给其它pool中。下面介绍公平调度器的两个特性,这两个特性使得公平共享算法简单了一些。

1、pool的权重代表了某个pool能得到slot数量多少的能力。比如,权重为2的pool能得到的slot数量是权重为1的pool的2倍。

2、公平共享量低于其最小共享量的pool优先得到空闲的slot比较器对job或pool首先按照公平共享量低于最小共享量的差额进行排序,按照然后再runningTasks/weight(jobWeight或poolWeight),再依次扫描队列,选择合适的pool或job。公平调度器的实现—公平共享量的计算方法

公平共享量是基于最小共享量和共享资源量计算得到的,它反映的是某个pool经过资源共享(某些pool的资源用不了,会自动共享给其他pool)之后,一共可以获取的资源总量,一般会大于等于最小共享量。如果每个pool没有配置最小共享量,且提交了无限量的作业,则让每个pool的slotsAssigned/weight值相同即可。(其中slotsAssgined表示分配给该pool的slot数,weight表示pool的权重)。而有了最小共享量minShare和pool中的需求量demand(该pool中所有作业尚需的slot总数)后,计算公平共享量fairShare需注意以下两种情况:(1)某些pool中的最小共享量可能用不完(2)给配给某些pool的资源量小于其最小共享量

公平调度器的实现—公平共享量的计算方法考虑到以上两种情况,调度器设计了基于比率R的公平资源分配方法(设集群中资源总量为totalSlots):[1]如果一个pool的demand<R*weight,则该pool的fairShare=demand[2]如果一个pool的minShare>weight,则该pool的fairShare=minShare[3]除此之外,所有pool的fairShare=R*weight[4]所有pool的的fairShare之和应为totalSlots

通过以上算法计算出的公平共享量即为“公平调度器”的“公平”含义之所在,应尽量保证每个pool获取的资源量为fairshare,如果一定时间期限内达不到,则抢占资源。关于这个R是不是一定满足条件4,有资料显示一定存在这个样的R。公平调度器的实现—调度流程

新版本的Hadoop采用公平调度器的层次调度算法,首先选择一个pool,然后从该pool中选择一个job,最后从该job中选择一个locality的task。

公平调度器的实现—一些特性

1.资源抢占当一定时间(管理员可配置)内,某个pool中获取的资源量少于最小共享量,或者公平共享量的一半,则调度器会找出哪个pool抢占了该pool的资源,并杀死相应数量的task以抢占资源。之所以要进行抢占,还是为了“公平”,即:保证每个pool能获取到它应得到的资源。2.delayscheduling机制当出现空闲slot时,如果排在队列前面的job对应的所有task均没有locality特性,则该作业会延迟调度,直到一段时间后,该job出现locality的task或者发生超时,才不得不调度该job的task。在此解释下locality:当出现空闲slot时,该slot来自某个节点,而该节点上存有部分数据,如果某个task所需要的数据正好位于该节点上,则将该slot分配给该task是非常好的,因为它避免了通过网络读取数据。3、计算能力调度器CapacityScheduler

设计思想:支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。特性:(1)计算能力保证。支持多个队列某个队列可以被提交到某一个队列中。每个队列会配置一定比例的计算资源,且所有提交到队列中的作业共享该队列中的资源。(2)灵活性。空闲资源会被分配给那些未到达资源使用上的队列,当某个未到达资源的队列需要资源时,一旦出现空闲资源,便会分配给它们。(3)支持优先级。队列支持作业优先级调度(默认是FIFO)(4)多重租赁。综合考虑多种约束防止单个作业、用户或者队列独占队列或集群中的资源。(5)基于资源的调度。支持资源密集型作业,允许作业使用的资源量高于默认值,进而可容纳不同资源需求的作业。不过,当前仅支持内存资源的调度CapacityScheduler—涉及到的变量

在CapacityScheduler中,存在三种粒度的对象,分别为:queue、job和task,它们均需要维护的一些信息:

(1)queue维护的信息@queueName:queue的名称@ulMin:每个用户的可用的最少资源量(所有用户均相同),需用户在配置文件中指定@capacityPercent:计算资源比例,需用户在配置文件中指定@numJobsByUser:每个用户的作业量,用以跟踪每个用户提交的作业量,并进行数量的上限限制。该队列中map或reducetask的属性:@capacity:实际的计算资源量,这个随着tasktracker中slot数目变化(用户可能在添加或减少机器节点)而动态变化,大小为:capacityPercent*mapClusterCapacity/100@numRunningTasks:正在running的task数目CapacityScheduler—涉及到的变量@numSlotsOccupied:正在running的task占用的slot总数,注意,在CapacityScheduler中,runningtask与slot不一定是一一对应的,每个task可获取多个slot,这主要是因为该调度支持内存资源调度,某个task可能需要多个slot包含的内存量。@numSlotsOccupiedByUser:每个用户的作业占用slot总数,用以限制用户使用的资源量。(2)job维护的信息priority:作业优先级,分为五个等级,从大到小依次为:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW;numMapTasks/numReduceTasks

:job的map/reducetask总数runningMapTasks/runningMapTasks:job正在运行的map/reducetask数finishedMapTasks/finishedReduceTasks:job已完成的map/reducetask数……(3)task维护的信息task开始运行时间,当前状态等CapacityScheduler—调度算法当某个tasktracker上出现slot时,调度器依次选择一个

queue、(选中的queue中的)job、(选中job中的)task,并将该slot分配给该task。下面介绍选择queue、job和task所采用的策略:(1)选择queue:将所有queue按照资源使用率(numSlotsOccupied/capacity)从小到大排序,依次进行处理,直到找到一个合适的job。(2)选择job:在当前queue中,所有作业按照作业提交时间和作业优先级排序(假设开启支持优先级调度功能,默认不支持,需要在配置文件中开启),调度依次考虑每个作业,选择符合两个条件的job:[1]作业所在的用户未到达资源使用上限;[2]该TaskTracker所在的节点剩余的内存足够该job的task使用。(3)选择task,同大部分调度器一样,考虑task的locality(就近原则)和资源使用情况。即:调用JobInProgress中的obtainNewMapTask()/obtainNewReduceTask()方法)

CapacityScheduler—调度流程

job11按到达时间排序,先来先服务job12job13job15job16job21job22job23job24job25job31job32job33job34job35job36job37queueAqueueBqueueC100slots(20%,15)(50%,25)(30%,25)job14FairSchedulerVSCapacityScheduler(1)相同点均支持多用户多队列,即:适用于多用户共享集群的应用环境单个队列均支持优先级和FIFO调度方式均支持资源共享,即某个queue中的资源有剩余时,可共享给其他缺资源的queue(2)不同点

核心调度策略不同

计算能力调度器的调度策略是,先选择资源利用率低的queue,然后在queue中同时考虑FIFO和memoryconstraint因素;而公平调度器仅考虑公平,而公平是通过作业缺额体现的,调度器每次选择缺额最大的job(queue的资源量,job优先级等仅用于计算作业缺额)。内存约束

计算能力调度器调度job时会考虑作业的内存限制,为了满足某些特殊job的特殊内存需求,可能会为该job分配多个slot;而公平调度器对这种特殊的job无能为力,只能杀掉这种task。4、

异构负载动态调度器

设计目标:

异构负载调度器将问题集中在当MapReduce框架中有不同种类负载时怎样提高硬件利用率。作业按其类型可分为CPU频繁类型和IO频繁类型。但目前Hadoop的调度器(前面的三种调度器)都没有考虑到作业负载的类型,调度的策略都是在根据不同规则排列的作业队列取队首作业运行,这样会降低整个系统的吞吐量。设计思想:

设计一个三级队列调度器,包含工作负载预测机制MR-Predict和三个不同的队列,即:CPU-Bound队列,I/O-Bound队列和等待队列。通过MR-Predict机制自动地预测到达的作业负载类型并把它们放入不同的队列中。每一个队列独立地按照FCFS调度策略工作。异构负载动态调度器的设计实现1、定义变量:

MOD:MapOutData,map端输出数据量

MID:MapInData,map端输入数据量

SOD:ShuffleOutData,Shuffle端输出数据量

SID:ShuffleInData,Shuffle端输入数据量

n:某个节点中正在并发执行任务的个数

MICT:MapTaskCompletedTime,Map任务完成所需时间

DIOR:磁盘IO传输速率:参数,保证:MOD=*MID异构负载动态调度器的设计实现2、分类规则:如果满足下列条件,则将该作业标记为CPU-Bound类如果满足下列条件,则将该作业标记为Sway队列类如果满足下列条件,则将该作业标记为I/O-Bound类假设每一个reducer有相同大小的数据输入,则SID与集群的分布有关。每个节点的SID取决于该节点运行的reducer和整个集群中的reducer的比例,计算如下:异构负载动态调度器的设计实现3、设计实现:(1)MR-Predict机制假设一个job的任务有相同的特点,即可以通过该任务已经执行的task的信息来预测其它任务的行为。当在一个节点有空闲的slot时,调度器将会指定一个map任务,当这些map任务完成时,可以计算出MICT、MID和MOD,然后根据下面的分类规则可将作业分为三种类型。异构负载动态调度器的设计实现(2)调度策略当一个新作业到达时,将会暂时被放到等待队列中以确定其负载类型。然后调度器将该作业一个Map任务分配到每一个TaskTracker上(改作业称为test-runtask)。如下图1示,如果CPU-Bound和I/O-Bound两个队列当时均为空,则等待队列的队首作业将会被移动到任意一个队列中,然后调度执行直至改作业的负载类型被确定。然后,如果发现该作业被移到了错误的队列,则将其移动到正确的队列。每个队列调度作业时采用FCFS策略。5、LATE—适用于异构集群的调度器(1)现有Hadoop调度器的缺陷:现有的Hadoop调度器都是建立在同构集群的假设前提下,具体假设如下:1)集群中各个节点的性能完全一样2)对于reducetask,它的三个阶段:copy、sort和reduce,用时各占1/33)同一job的同类型的task是一批一批完成的,他们用时基本一样。

现有的Hadoop调度器存在较大缺陷,主要体现在探测落后任务的算法上:如果一个task的进度落后于同类型task进度的20%,则把该task当做落后任务(这种任务决定了job的完成时间,需尽量缩短它的执行时间),从而为它启动一个备份任务(speculativetask)。如果集群异构的,对于同一个task,即使是在相同节点上的执行时间也会有较大差别,因而在异构集群中很容易产生大量的备份任务。(2)传统的调度器调度推测性任务的策略为了选择一个推测式任务,Hadoop监视器维护一个变量:进度得分。对于一个map任务,这个得分等于已经输入数据占整个输入数据的比例;对于一个reduce任务,由于执行被分成了下面三部分,则每一部分占据该分值的1/3.1)拷贝阶段,此时任务正在所有map任务的输出。分值等于已经拷贝的map输出数据的比例;

2)排序阶段,此时所有map任务的输出正在按key值排序。分值等于数据合并的比例;

3)reduce阶段,此时一个用户自定义的reduce函数正在处理map的输出结果。分值等于reduce函数已经处理数据的比例。Hadoop定义一个阈值(threshold),当某一个任务至少执行了1分钟且进度得分小于该阈值-0.2时,该任务就被标定位落后任务。(3)LATE的设计思想:主要用来调度探测性任务。与传统调度器不同的是,LATE会对运行的慢的任务赋予权值并按照权值执行一部分的探测性任务。在选择执行探测性任务的节点时,选择“最快”的节点来执行。而且,LATE会规定探测性任务的最大值以防止系统颠簸。(4)定义变量SpeculativeCap:系统中最大同时执行的speculativetask数目(推荐值为总slot数的10%

);SlowNodeThreshold:标志节点快慢的阈值,调度得分低于该阈值的node(慢节点)上不会启动speculativetask(推荐值为25%

);SlowTaskThreshold:标志是否为该任务启动推测性任务的阈值,当task进度低于同批同类task的平均进度的SlowTaskThreshold时,会为该task启动speculativetask(推荐值为25%

)。TimeLeft:任务的剩余时间,计算公式为(1-进度得分)/执行比,其中执行比=进度得分/执行时间。(5)调度策略如果当前有一个空闲的slot并且系统中的推测性任务的个数小于SpeculativeCap,则按下面策略调度推测性任务。1)如果该节点是慢节点(节点得分低于SlowNodeThreshold),则忽略这个请求;(2)对当前正在运行的task按估算的剩余完成时间(TimeLeft)排序;(3)选择剩余完成时间最大且进度低于SlowTaskThreshold的task,为该task启动备份任务。

6、

Constraint-basedScheduler–实时调度器设计目标:这种调度器集中处理如何满足用户的时间需求上。其设计目标有两个:(1)能够给用户及时的反馈,告诉用户所提交的某项工作是否可以在其规定的Deadline内完成。如果能完成,则反馈给用户可以执行的信号;否则,告诉用户需要修改Deadline后再次提交数据。(2)在满足所有实时作业需求的同时能保证可同时运行的作业达到最大量。设计思想:(1)综合考虑影响作业完成时间的变量,例如map和reduce运行时,map和reduce输入数据大小,数据的分布情况等等,建立一个作业执行代价模型。(2)根据建立的作业执行代价模型,并把用户的Deadline要求作为输入的一部分考虑进去来确定某一作业的可调度性。只有作业明确要求的Deadline能被满足时,改作业才能被调度。一般的调度算法考虑的是系统中所有作业的运行情况,该算法考虑的是当前时间空闲slot的个数。Constraint-basedScheduler的设计实现1、Deadline估计模型(1)定义变量:

:一个查询,是查询的到来时间,是输入数据大小,是相关的最终期限:由查询对应的Hadoop的一个作业。是第个map任务,是第个reduce任务,其中,。作业的到达时间、输入数据大小和最终期限如所示:集群中分配给该工作的所有slot数目。,其中,是map任务的slot数,是reduce任务的slot数

:map数据分布向量,其中是作业的map任务的总数。是分配给第个map任务的数据的比例。由于map数据是平均分配给各个map节点上的,所以。:过滤比,即map任务输出端数据和输入端数据的比值,一般情况下:reduce任务输出端的数据量

:map任务处理单元数据的时间:reduce任务处理单元数据的时间

:转换单元数据的通信时间:作业第一个map任务的开始时间

:作业第一个reduce任务的开始时间

:作业能被调度的map任务需被满足的最小数

:作业能被调度的reduce任务需被满足的最小数(2)计算过程为了计算作业的持续时间,考虑map阶段的计算时间,reduce阶段的计算时间和reduce的拷贝阶段数据转换时间。因此,作业的持续时间可以表述如下:由于作业有一个到达时间和最后期限,因此

设reduce任务开始的最大时间,则:所以,因此,(3)调度过程调度器维护一个按照Deadline排序的优先队列,任务调度从队首作业开始。如果当前作业的需求不能被满足,则考虑下一个作业,直至队列中没有作业或者TaskTracker中没有可用的slot为止。1)当一个作业到达时,首先根据上面公式计算,如果当前可用的slot数量小于,则作业被拒绝。否则,进行第二步;2)根据为该作业指定的所有reduce的数量(一般由用户指定或者设为默认值)来计算。如果在时刻系统可用的slot数量小于该作业指定的所有reduce的数量,则仍然拒绝该作业。否则转入第三步;3)如果作业被调度且所有map阶段的工作已经完成,则计算来确定多少个reduce任务能被调度。(3)调度过程调度器维护一个按照Deadline排序的优先队列,任务调度从队首作业开始。如果当前作业的需求不能被满足,则考虑下一个作业,直至队列中没有作业或者TaskTracker中没有可用的slot为止。1)当一个作业到达时,首先根据上面公式计算,如果当前可用的slot数量小于,则作业被拒绝。否则,进行第二步;2)根据为该作业指定的所有reduce的数量(一般由用户指定或者设为默认值)来计算。如果在时刻系统可用的slot数量小于该作业指定的所有reduce的数量,则仍然拒绝该作业。否则转入第三步;3)如果作业被调度且所有map阶段的工作已经完成,则计算来确定多少个reduce任务能被调度。ContentsHadoop和MapReduce简介1

Hadoop的集群作业调度原理2如何编写自己的Hadoop调度器4

结论与展望5

Hadoop的集群作业调度算法3如何编写自己的Hadoop调度器步骤1编写JobInProgressListener步骤2编写调度器类,继承抽象类TaskScheduler步骤3配置并启用Hadoop调度器

//编写自己的JobInProgressListener抽象类abstractclassJobInProgressListener{publicabstractvoidjobAdded(JobInProgressjob)throwsIOException;publicabstractvoidjobRemoved(JobInProgressjob);publicabstractvoidjobUpdated(JobChangeEventevent);}编写JobInProgressListener//writeyourownlistenerclassMyJobListener

extendsJobInProgressListener{privateList<JobInProgress>jobQueue=new

ArrayList<JobInProgress>();publicvoidjobAdded(JobInProgressjob){synchronized(jobQueue){

jobQueue.add(job);//将Job添加到队列中

tt.initJob(job);//初始化job

sortJobs();//对所有作业进行排序}}publicvoidjobRemoved(JobInProgressjob){synchronized(jobQueue){

jobQueue.remove(job);}}……}编写调度器类abstractclassTaskSchedulerimplementsConfigurable{publicsynchronizedvoidsetTaskTrackerManager(

TaskTrackerManager

taskTrackerManager){

this.taskTrackerManager=taskTrackerManager;

}publicabstrac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论