Hadoop云平台下基于负载监控的混合调度方法
技术领域
本发明涉及云平台作业调度方法,尤其是涉及一种Hadoop云平台下基于负载监控的混合作业调度方法。
技术背景
无线感知网络技术是近几年一个渐渐兴起的技术,集成了传感器技术、嵌入式计算技术、分布式信息处理技术和通信技术,是一种全新的信息获取和处理技术。它在理论设计、应用实现、发展方向等方面与传统网络不同,因此传感器网络的理论依据与***设计与传统的网络***有很大的区别。Hadoop是一个具有高可靠性的良好扩展性的分布式***,可以在大量廉价的硬件设备组成的集群上运行应用程序,并且为应用程序提供了一组稳定可靠的接口。
Hadoop现有调度方法调度目标都比较单一,仅能满足单一的负载情况,而在不同的负载情况下,性能有很大区别,造成了作业调度方法适应性较差,不能满足云平台的复杂性和多样性。Hadoop中作业调度方法广泛使用FIFO方法或公平调度方法。FIFO方法根据作业(job)的提交时间对作业进行分配,优先分配先提交的作业。FIFO方法实现简单,调度消耗少,但是在面对海量数据处理时,某些需要大量计算的作业会长期占用资源,而后续作业将迟迟得不到执行,影响***的性能和用户的体验。公平调度方法保证作业能够公平的获得资源进行执行,但是作业平均完成时间较长。
发明内容
本发明的目的是提供一种高效的Hadoop云平台下的混合调度方法,从而应对云平台的复杂性。
实现本发明目的的技术解决方案为:
1、Hadoop***中的资源(taskTracker)向中心节点(jobTracker)持续发送自身节点的实时信息,包括是否空闲,正在执行任务的已执行时间以及执行进度。
2、对***负载进行实时监控,根据资源发送的实时信息计算***内的负载程度,***负载指***在某时刻正在执行的任务量:
假设***中有m个资源,其中空闲的资源个数为k,待执行的任务数为numT,定义***的负载度为:
若0≤HL<1,则***处于低载;
若1≤HL≤2,则***处于负载平衡;
若HL>2,则***处于过载。
3、当有资源向中心节点请求任务(task)时,根据实时负载程度选择调度方案:在***资源低载情况下,使用FIFO调度方法,降低调度消耗;在负载平衡情况下使用公平调度方法,提高***的公平性,保证作业都能得到执行;在过载情况下使用Max-D调度方法,使得作业平均完成时间缩短。
3中涉及的Max-D调度方法实现流程如下:
第一步:确定云环境中所有计算资源以及空闲资源的集合。
第二步:对待分配作业按作业提交先后排序成队列,新提交的作业被加入该队列尾部。
第三步:对排序后的作业进行调度,采用Max-D方法选择合适的资源进行执行。
对于3中第三步的Max-D方法,其步骤如下:
步骤3.1:对所有待分配作业,计算作业在所有计算资源上的平均估计运行时间;
步骤3.2:计算每个作业的平均估计运行时间以及其在单个空闲的计算资源上最少的运行时间之间的差值Di,并记录该计算资源;
步骤3.3:在所有作业中找到差值Di最大的作业,并将该Di记为D;
步骤3.4:若D≥0,则分派作业给记录的资源进行处理,同时将该资源从空闲资源集合中去除;若D<0,则重新确定分配的资源和空闲资源集合,将完成其分配作业的资源加入到空闲资源集合中,然后返回步骤3.1。
步骤3.5:重复步骤3.2到步骤3.4直到为所有申请作业的资源分配了作业。
步骤3.1中计算资源平均估计完成时间方法如下:
假设云环境是由n个未分配作业T={t1,t2,...tn}和m个资源R={r1,r2,...rm}组成,每个资源同时只能对一个作业进行处理;资源中空闲的资源个数为k,记为R'={r1',r2',...rk'},其中k<m;作业ti在资源rj上的估计运行时间为TCirj,则作业ti在所有资源上的平均运行时间为
作业ti在资源rj上的完成时间,是正在rj上执行的作业的剩余完成时间以及作业ti在rj上的完成时间之和。
假设在云环境中,对于同一类作业,资源处理的速率与其处理的数据量成正比。作业i在资源r上的预计完成时间为正在资源r上运行作业的剩余完成时间以及作业i在资源r上执行时间之和:
其中,TCirj(k+1)表示将资源rj处理作业ti所需的完成时间,TCirj(k)表示前一个作业在资源rj上的预测完成时间;M(k)是运行该作业所需时间与运行单位作业所需时间的比值;RTCirj(k)表示前一个作业在rj上实际运行时间,pro(0<pro≤1)表示前一个作业的完成比例,如果资源rj是空闲资源,即前一个作业已经执行完成,则pro=1,上述公式可以简化为
通过该资源上前一个作业的估计执行时间TCirj(k)和实际执行时间RTCirj(k),使用公式(1)进行估算得到未调度的作业在某个资源上的执行时间。然而,在***刚启动的阶段,各资源上还未执行过作业,则资源的执行时间无法通过前一个作业的执行情况进行估算。因此在***刚启动时,对于所有资源,令
TCirj(0)=RTCirj(0)=0 (3)
这样待执行作业会首先选择未执行过作业的资源进行执行,在资源执行完第一个作业后,便得到了作业的实际执行时间RTCirj(1),令TCirj(1)等于RTCirj(1),则之后作业的运行时间可以按照公式(1)进行估算。
步骤3.2中计算差值Di的方法如下:
作业ti在所有未分配工作的节点上的最小运行时间记为mUTCi=min{TCir1',TCir2',...,TCirk'},记录下满足TCirj'=mUTCi的未分配作业rj',并记BRi=rj',然后根据公式Di=AvgTCi-mUTCi,得到作业i的差值Di。
本发明与现有技术相比,其显著优点:1、本发明通过对***负载的监控,实时的为待分配的任务选择合适的调度方法,保证了***在不同的***状态下始终能够保持高效的性能;2、本发明的作业调度只会将作业分配到空闲的资源上,保证了云环境下负载的均衡,不会出现部分资源过载而其他资源空闲的情况;3、本发明通过Max-D方法为作业选择最合适的资源,减少了作业的平均完成时间,提高了***的吞吐率。
附图说明
附图是本发明所述的基于负载混合调度策略原理图。
具体实施方式
下面结合附图对本发明做进一步说明。
假设***中有m个资源,其中空闲的资源个数为k,待执行的任务数为numT,定义***的负载度为:
若0≤HL<1,则***处于低载;
若1≤HL≤2,则***处于负载平衡;
若HL>2,则***处于过载。
基于负载监控的混合调度策略包含一个负载监测器和一个调度选择器。负载监测器负责对***的负载进行监测与计算,调度选择器则根据负载监测器提供的负载情况对任务进行调度。
当有空闲资源请求任务执行时,调度选择器会通过负载检测器获得实时的***负载状况,然后根据负载状况选择相应的作业调度方法。
1、当***处于低负载,例如***刚刚启动时,***中的空闲资源数量大于等待执行的任务,调度选择器会选择FIFO调度方法。当有资源申请任务时,FIFO算法会按照提交时间对所有等待执行的作业进行排序,然后选择第一个作业,将该作业中的任务分配给资源。对于作业内任务的选择,FIFO算法会优先分配失败后等待再次执行的任务。此时FIFO调度方法能够减少调度消耗以及作业平均完成时间。
2、随着***的运行,负载会逐渐增加达到负载均衡状态,但是还没有达到负载的峰值。FIFO方法无论是作业平均完成时间还是公平性,性能都已经开始下降,此时调度器会选择公平调度方法作为调度方法,以保证用户获得资源的公平性。
3、当负载进一步增加达到过载水平,公平调度方法会导致作业平均完成时间快速增加。此时调度选择器会选择Max-D调度方法,尽管资源分配的公平性会降低,但是却能大幅减少作业平均完成时间。
其中Max-D调度算法实施方案如下:
假设云环境是由n个未分配作业T={t1,t2,...tn}和m个资源R={r1,r2,...rm}组成,每个资源同时只能对一个作业进行处理;资源中空闲的资源个数为k,记为R'={r1',r2',...rk'},其中k<m;作业ti在资源rj上的估计运行时间为TCirj,则作业ti在所有资源上的平均运行时间为作业ti在所有未分配工作的节点上的最小运行时间记为mUTCi=min{TCir1',TCir2',...,TCirk'},记录下满足TCirj'=mUTCi的未分配作业rj’,并记BRi=rj';
当需要调度的作业集合非空时,执行以下操作:
步骤1:对作业集合T中所有作业分别计算AvgTCi;
步骤2:对每个作业ti找到mUTCi,并计算Di=AvgTCi-mUTCi;
步骤3:找到作业ti,使得Di=Max{D1,D2,...,Dn},若有多个作业满足条件,则按照这些作业到来的顺序选择ti;
步骤4:若Di≥0,则分派作业ti给资源BRi进行处理,同时将资源BRi从空闲资源集合R’中去除;若Di<0,则重新评估分配的资源和空闲资源集合,将完成其分配作业的资源加入到空闲资源集合中,然后返回步骤(1)。
步骤5:重复步骤2到步骤4直到为所有申请作业的资源分配了作业。
作业ti在资源rj上的完成时间,是正在rj上执行的作业的剩余完成时间以及作业ti在rj上的完成时间之和。
本发明假设对于同一类作业,资源处理的速率与其处理的数据量成正比。作业i在资源r上的预计完成时间为正在资源r上运行作业的剩余完成时间以及作业i在资源r上执行时间之和:
其中,TCirj(k+1)表示将作业ti分配给资源rj处理所需的完成时间,TCirj(k)表示前一个作业在资源rj上的预测完成时间;M(k)是运行该作业所需时间与运行单位作业所需时间的比值;RTCirj(k)表示前一个作业在rj上实际运行时间,pro(0<pro≤1)表示前一个作业的完成比例,如果资源rj是空闲资源,即前一个作业已经执行完成,则pro=1,上述公式可以简化为
根据公式,未调度的作业在某个资源上的执行时间可以通过该资源上前一个作业的估计执行时间TCirj(k)和实际执行时间RTCirj(k)进行估算。然而,在***刚启动的阶段,各资源上还未执行过作业,则资源的执行时间无法通过前一个作业的执行情况进行估算。因此在***刚启动时,对于所有资源,令
TCirj(0)=RTCirj(0)=0
这样待执行作业会首先选择未执行过作业的资源,在资源执行完第一个作业后,便得到了作业的实际执行时间RTCirj(1),令TCirj(1)等于RTCirj(1),则之后作业的运行时间可以按照公式(1)进行估算。