发明内容
本发明解决的问题在于,自动的调整节点上运行的任务数目,以使Hadoop平台体现出较高的任务执行效率。
更进一步的,实现集群运行任何异构性的作业或者作业运行在任何异构性的集群中都能使Hadoop平台体现出良好的性能。
更进一步的,通过感知机制对节点中的资源、任务进行动态的调整,提高集群中的资源使用率以缩短作业的响应时间,使得集群中的资源和任务执行速率达到最佳匹配的状态。
更进一步的,使用感知节点的计算能力、任务执行状态实现动态调整Slots数目,有效的感知了集群和作业的异构性。
本发明公开了一种于Hadoop平台中动态调整任务数目的方法,包括:
步骤10,持续获取节点中运行的任务的执行速率;
步骤20,计算执行速率在下降的任务的个数;
步骤30,根据该个数判断是否需要调整节点中所运行的任务的数目。
步骤10之前还包括:
步骤1,获取集群中每个节点的处理能力;
步骤2,获取每个节点的处理资源的使用率。
所述的方法还包括:
该获取集群中每个节点的处理能力的步骤进一步包括:读取每个节点上的CPU核数;和/或
该获取每个节点的处理资源的使用率的步骤进一步包括:每隔固定时间间隔读取每个节点的CPU使用率以及内存使用率。
该步骤10进一步包括:
在节点的每个任务的执行过程中,以固定时间间隔持续获取该任务的当前执行进度,据以计算各时间点的执行速率。
TER=(TaskProgress_New-TaskProgress_Old)/IntervalTime
其中,TaskProgress_New为当前任务执行进度,TaskProgress_Old为前次任务执行进度,TER为执行速率,IntervalTime为固定时间间隔。
该步骤20进一步包括:
针对每个任务依次判断:该任务的本次执行速率是否小于该任务的前次执行速率;
如果是,该任务视为执行速率在下降,该个数增加1。
该步骤30进一步包括:
判断TER_Changed_Num≥Curr_Slots_Num×ThresHold是否为真,如果是,减少该节点中运行的任务的数目,如果否,增加该节点中运行的任务的数目;
其中,TER_Changed_Num为执行速率在下降的任务的个数,Curr_Slots_Num为节点中当前运行的任务数,ThresHold为一阈值。
该减少该节点中运行的任务的数目的步骤进一步包括:
判断节点中的当前任务数目,如果大于1且已有任务执行结束,减少节点中运行的空闲任务的数目;其余情况返回。
该增加该节点中运行的任务的数目的步骤进一步包括:
判断节点中的当前任务数目是否等于节点所配置的最大任务数目,如果是,进一步判断节点的剩余处理资源是否大于新增任务所需的最低处理资源阈值,如果是,在节点中增加运行至少一空闲任务;其余情况返回。
本发明还公开了一种Hadoop平台中动态调整任务数目的系统,包括:
执行速率获取装置,持续获取节点中运行的任务的执行速率;
个数计算装置,计算执行速率在下降的任务的个数;
调整判断装置,根据该个数判断是否需要调整节点中所运行的任务的数目。
所述的系统还包括:
处理能力获取装置,获取集群中每个节点的处理能力;
处理资源获取装置,获取每个节点的处理资源的使用率。
所述的系统还包括:
该处理能力获取装置进一步包括:读取每个节点上的CPU核数的单元;和/或
该处理资源获取装置进一步包括:每隔固定时间间隔读取每个节点的CPU使用率以及内存使用率的单元。
该执行速率获取装置进一步包括:
在节点的每个任务的执行过程中,以固定时间间隔持续获取该任务的当前执行进度,据以计算各时间点的执行速率的单元。
TER=(TaskProgress_New-TaskProgress_Old)/IntervalTime
其中,TaskProgress_New为当前任务执行进度,TaskProgress_Old为前次任务执行进度,TER为执行速率,IntervalTime为固定时间间隔。
该个数计算装置进一步包括:
针对每个任务依次判断:该任务的本次执行速率是否小于该任务的前次执行速率,如果是,该任务视为执行速率在下降,该个数增加1的单元。
该调整判断装置进一步包括:
判断TER_Changed_Num≥Curr_Slots_Num×ThresHold是否为真的单元,如果是,调用减少该节点中运行的任务的数目的单元,如果否,调用增加该节点中运行的任务的数目的单元;其中,TER_Changed_Num为执行速率在下降的任务的个数,Curr_Slots_Num为节点中当前运行的任务数,ThresHold为一阈值。
该减少该节点中运行的任务的数目的单元进一步包括:
判断节点中的当前任务数目,如果大于1且已有任务执行结束,减少节点中运行的空闲任务的数目,执行减少节点中运行的空闲任务的数目的模块。
该增加该节点中运行的任务的数目的单元进一步包括:
判断节点中的当前任务数目是否等于节点所配置的最大任务数目,如果是,进一步判断节点的剩余处理资源是否大于新增任务所需的最低处理资源阈值,如果是,在节点中增加运行至少一空闲任务的单元。
本发明通过心跳机制传递信息,解决了原有的集群与作业任务之间的隔离问题。同时,自动的调整节点上运行的任务数目,以使Hadoop平台体现出较高的任务执行效率。使用感知节点的计算能力、任务执行状态实现动态调整Slots数目,有效的感知了集群和作业的异构性。实现集群运行任何异构性的作业或者作业运行在任何异构性的集群中都能使Hadoop平台体现出良好的性能。通过感知机制对节点中的资源、任务进行动态的调整,提高集群中的资源使用率以缩短作业的响应时间,使得集群中的资源和任务执行速率达到最佳匹配的状态。
具体实施方式
Hadoop平台包括主平台100以及多个节点200。主平台100中包括JobTracker节点。每个节点200中包括TaskTracker节点以及DataNode节点。每个节点200的DataNode节点均与一NameNode节点300连接。
Hadoop平台中包括多个节点,每个节点均设置有处理器,从而拥有处理能力。同时,每个节点均可接受用户发送的作业,据以运行不同的任务。每个节点具有标志slot,slot用来标识任务是否可以执行且可以同时执行几个。本发明可基于节点中各个任务的运行情况,动态调整所执行的任务的数目,以提高Hadoop平台的任务执行效率。
如图1所示为本发明的一种于Hadoop平台中动态调整任务数目的方法的流程图。
步骤10,通过心跳机制持续获取节点中运行的任务的执行速率;
步骤20,计算执行速率在下降的任务的个数;
步骤30,根据该个数判断是否需要调整节点中所运行的任务的数目。
本发明通过持续监控节点中运行的任务的执行速率的变化,而实时调整节点中的任务数目,从而实现集群运行任何异构性的作业或者作业运行在任何异构性的集群中都能使Hadoop平台体现出良好的性能和较高的任务执行效率。
以下具体描述本发明的实现过程。如图2所示为本发明的一种于Hadoop平台中动态调整任务数目的方法的详细流程图。
在步骤10之前,执行步骤1:获取集群中每个节点的计算能力。
获取集群中每个节点的计算能力的步骤通过读取每个节点上的CPU核数的方式来实现。CPU可以是一核、双核或多核,节点上的CPU核数的多寡用于表述该节点的计算能力的高低。通过步骤1可使得Hadoop平台能够感知异构集群中每个节点的处理能力。
具体而言,步骤1中,Hadoop集群中每个节点会读取Linux系统下/proc/cpuinfo文件,以读取该节点上CPU核数的信息,并把CPU核数作为判断节点计算能力高低的参数存储于TaskTrackerStatus对象中的成员变量coresNum中。
接下来,用户提交的作业经过初始化生成多个任务已运行在集群中的各个节点上,此时,执行步骤2,获取每个节点的处理资源的使用率。
该步骤2具体可通过每隔固定时间间隔读取每个节点的CPU使用率以及内存使用率的方式来实现。
具体而言,Hadoop平台管理节点要每隔一段时间获取节点处理资源的使用情况,以作为后续调整任务数目时的参考。节点通过辅助工具OSUtils读取Linux系统下/proc/stat文件计算出当前CPU的使用率,并通过读取Linux系统下/proc/meminfo文件计算内存的使用率,然后,将获取的CPU和内存的使用率存储到TaskTrackerStatus对象中的成员变量CPU_Utilization_Factor与MEM_Utilization_Factor中。为了保证获取的信息能够反映节点当前的状态和任务的执行情况,该固定时间间隔可以是Hadoop平台固有的心跳时间间隔,以借助心跳机制在平台与节点之间传递信息,克服原有的集群与任务之间的隔离问题。
步骤2以后继续执行步骤10:Hadoop平台在每个任务的执行过程中,以固定时间间隔持续获取该任务的当前执行进度,据以计算各采样时间点的执行速率。
也就是说,节点中可能执行着多个任务,对每个任务均进行执行进度的采样,即,每隔固定时间间隔,获取任务的当前任务执行进度。每两个采样时间点之间间隔该固定时间间隔,每个采样时间点均对应有本次采样得到的当前任务执行进度,则通过相邻的两次采样得到的执行进度,计算得到在后采样时间点的执行速率。该固定时间间隔可以是Hadoop平台固有的心跳时间间隔,即,利用心跳机制传递信息。
即,TER=(TaskProgress_New-TaskProgress_Old)/IntervalTime
其中,TaskProgress_New为当前任务执行进度,TaskProgress_Old为前次任务执行进度,TER为执行速率,IntervalTime为固定时间间隔。
具体而言,为节点上运行的多个任务构建一个AttemptMapTask集合并存储于TaskTracker对象中,集合采用Key-Value存储格式,执行MapTask的任务ID(TaskID)作为Key,MapTask的执行进度(TaskProgress)作为Value,为了节省空间集合中仅存放最近一次记录的信息;集合存放形式为{(TaskID1,TaskProgress_1),(TaskID2,TaskProgress_2),......(TaskIDn,TaskProgress_n)},n为节点上同时运行的任务数目。
Hadoop平台通过任务的执行状态(TaskStatus)获取任务的TaskID和任务本次执行进度(TaskProgress_New)。具体的,获取该节点上本次的状态为Running的TaskID和TaskProgress_New,判断在任务执行进度集合中是否有该TaskID的键值对;如果有,首先取出任务的前次任务执行进度(TaskProgress_Old),然后更新该任务在任务执行进度集合中的当前执行进度值;如果没有,则将前次任务执行进度(TaskProgress_Old)赋值为零,同时将本次的任务执行进度添加到集合中。根据TaskID到集合中取出的前次任务执行进度TaskProgress_Old,计算对应的任务执行速率。任务执行速率用于描述该节点上任务执行的快慢,该值等于取得的当前任务执行进度(TaskProgress_New)与前次该任务的执行进度(TaskProgress_Old)差比上时间间隔。该时间间隔为固定时间间隔。Hadoop平台通过对当前节点心跳信息的处理而获得任务的执行情况,特别是执行速率。
接下来执行步骤20,针对每个任务依次判断:该任务的当前执行速率是否小于该任务的前次执行速率;如果是,该任务视为执行速率在下降;统计执行速率下降的任务的个数。
本发明在每个采样时间点,均对所有任务的当前执行速率进行判断,则对比每个任务的当前执行速率与前次执行速率,即可获知该任务的执行速率是否在下降。
具体而言,该步骤通过如下方式实现:构建一个TaskTER集合用于存储节点上运行的多个任务,并将集合存储于TaskTracker对象中,存储格式与AttemptMapTask集合一样,执行MapTaskID作为Key,任务的执行速率TER作为Value,为了节省空间集合中仅存放最近一次记录的信息;集合存放形式为{(TaskID1,TER-1),(TaskID2,TER-2),.......(TaskIDn,TER-n)},n为节点上同时运行的Task数目。根据步骤10的结果,获取任务当前的执行速率TER_New及其所对应的TaskID。判断在任务执行速率集合中是否有该TaskID的键值对,如果有,首先取出任务的前次执行速率(TER_Old),然后更新该任务在任务执行速率集合中的当前执行速率值;如果没有,则将前次任务执行速率(TER_Old)赋值为-1,同时将当前的执行速率添加到集合中。比较TER_New的值与TER_Old的值的大小;如果TER_New小于TER_Old,则TER_Changed_Num加1,反之TER_Changed_Num值不变。将TER_Changed_Num的值存放在TaskTracker对象中的成员变量中。
接下来执行步骤30,根据执行速率在下降的任务的个数判断是否需要调整节点中所运行的任务的数目。
节点中存储有一专门用于判断调整与否的阈值,具体的判断标准为:
判断TER_Changed_Num≥Curr_Slots_Num×ThresHold是否为真,如果是,表明当前节点运行的任务较多,则减少该节点中运行的任务的数目,执行步骤41,该减少的数目可为一预定步数,例如1个或多个;如果否,表明当前节点还有剩余处理资源,则增加该节点中运行的任务的数目,执行步骤42,该增加的数目可为一预定步数,例如1个或多个;其中,TER_Changed_Num为执行速率在下降的任务的个数,Curr_Slots_Num为节点中当前运行的任务数,ThresHold为该阈值。
步骤41,判断节点中的当前任务数目,如果大于1,减少节点中运行的空闲任务的数目;如果等于1且该任务已执行结束,减少节点中运行的空闲任务的数目;其余情况返回。
具体而言,获取节点上当前的任务数(Curr_Slots_Num)、任务的状态(Task_State)、当前空闲任务数(numFreeSlots)、最大任务数(maxMapSlots)、最大的Jvm数(maxJvms);其次,判断减少任务条件是否满足,即判断Curr_Slots_Num的数目,如果大于1且已经有任务执行结束,则减少numFreeSlots、maxMapSlots、maxJvms,其余情况,返回;
步骤42,判断节点中的当前任务数目是否等于节点所配置的最大任务数目,如果是,说明配置的任务数目不是最佳的,则进一步判断节点的剩余处理资源是否大于新增任务所需的最低处理资源阈值,如果是,在节点中增加运行至少一空闲任务;其余情况返回。特别是,根据步骤2的结果,判断剩余处理资源是否大于新增任务所需的最低处理资源阈值。
具体而言,获取节点上当前的任务数(Curr_Slots_Num)、任务的状态(Task_State)、当前空闲任务数(numFreeSlots)、最大任务数(maxMapSlots)、最大的Jvm数(maxJvms);其次,判断增加任务条件是否满足,即判断Curr_Slots_Num是否已经达到节点的任务最大值(maxMapSlots);如果Curr_Slots_Num等于maxMapSlots,且节点上剩余的处理资源能够满足新增任务的要求,就增加numFreeSlots、maxMapSlots、maxJvms;其余情况返回。
接下来,步骤41或42执行结束后,执行步骤50,将步骤41或42的执行结果,通过心跳机制发送给JobTracker,由JobTracker根据修改后的任务数目决定任务的分配。其实现方法为:
修改任务数目后,重新判断用于标识节点是否请求新任务的标志askForNewTask。随后,TaskTracker利用心跳向JobTracker发送请求任务的标志askForNewTask,JobTracker在接受该标志位后,会根据修改后的任务数目和该标志的值,决定任务分配。
本发明中,在每个采样时间点均执行上述步骤2、10、20、30、41、42、50,则Hadoop平台可随时动态调整节点中的任务数目。
本发明通过感知节点的计算能力,并根据资源使用情况和任务执行情况动态调整Slots数目,达到任务的执行效率与节点资源的较佳匹配状态。对于构造适合异构性集群和作业的云平台有重要的实际意义,具有良好的市场前景和应用价值。
另外,对应图1、2所述的方法,本发明还公开了一种Hadoop平台中动态调整任务数目的系统,如图3A、3B所示,包括:
执行速率获取装置310,持续获取节点中运行的任务的执行速率;
个数计算装置320,计算执行速率在下降的任务的个数;
调整判断装置330,根据该个数判断是否需要调整节点中所运行的任务的数目。
所述系统还包括:处理能力获取装置301,获取集群中每个节点的处理能力;处理资源获取装置302,获取每个节点的处理资源的使用率。
该处理能力获取装置301进一步包括:读取每个节点上的CPU核数的单元。
该处理资源获取装置302进一步包括:每隔固定时间间隔读取每个节点的CPU使用率以及内存使用率的单元。
该执行速率获取装置310进一步包括:在节点的每个任务的执行过程中,以固定时间间隔持续获取该任务的当前执行进度,据以计算各时间点的执行速率的单元。
TER=(TaskProgress_New-TaskProgress_Old)/IntervalTime
其中,TaskProgress_New为当前任务执行进度,TaskProgress_Old为前次任务执行进度,TER为执行速率,IntervalTime为固定时间间隔。
该个数计算装置320进一步包括:针对每个任务依次判断:该任务的本次执行速率是否小于该任务的前次执行速率,如果是,该任务视为执行速率在下降,该个数增加1的单元。
该调整判断装置330进一步包括:
判断TER_Changed_Num≥Curr_Slots_Num×ThresHold是否为真的单元,如果是,调用减少该节点中运行的任务的数目的单元,如果否,调用增加该节点中运行的任务的数目的单元;其中,TER_Changed_Num为执行速率在下降的任务的个数,Curr_Slots_Num为节点中当前运行的任务数,ThresHold为一阈值。
该减少该节点中运行的任务的数目的单元进一步包括:判断节点中的当前任务数目,如果大于1且已有任务执行结束,减少节点中运行的空闲任务的数目,例如减1,执行减少节点中运行的空闲任务的数目的模块。特别的,为了加速算法的收敛,在较短的时间内找出运行任务数目的最优值,减少的任务数可以是根据历史任务信息来决定本次需要减少的任务个数。
该增加该节点中运行的任务的数目的单元进一步包括:判断节点中的当前任务数目是否等于节点所配置的最大任务数目,如果是说明配置的任务数据还不是最佳的,则进一步判断节点的剩余处理资源是否大于新增任务所需的最低处理资源阈值,如果是,在节点中增加运行至少一空闲任务的单元。
本发明通过心跳机制传递的信息,解决了原有的集群与作业任务之间的隔离问题。同时,自动的调整节点上运行的任务数目,以使Hadoop平台体现出较高的任务执行效率。使用感知节点的计算能力、任务执行状态实现动态调整Slots数目,有效的感知了集群和作业的异构性。实现集群运行任何异构性的作业或者作业运行在任何异构性的集群中都能使Hadoop平台体现出良好的性能。通过感知机制对节点中的资源、任务进行动态的调整,提高集群中的资源使用率以缩短作业的响应时间,使得集群中的资源和任务执行速率达到最佳匹配的状态。