一种面向Map/Reduce型海量数据处理平台的作业调度方法与流程

文档序号:14302777阅读:158来源:国知局
一种面向Map/Reduce型海量数据处理平台的作业调度方法与流程
本发明属于海量数据处理领域,特别涉及Map/Reduce型海量数据处理平台中的作业调度和资源管理。
背景技术
:Map/Reduce型海量数据处理平台是海量数据处理领域的最新技术进展,主要服务于具有一次写入,多次读取的数据访问模式以及易并行(EmbarrassingParallel)计算模式的大数据应用。Map/Reduce平台提供Map/Reduce并行计算模型及其相应的运行时环境。Map/Reduce并行计算模型将应用的数据处理流程抽象为Map阶段和Reduce阶段。Map阶段和Reduce阶段可分别映射为多个Map任务和Reduce任务并行执行。其中Map阶段主要进行数据转置和变形,Reduce阶段主要进行数据规约操作。从数据流的角度,Map阶段从分布式文件系统中,读取需要处理的输入数据,进行数据处理,并存入本地文件系统中;Reduce阶段获取Map阶段输出的文件,进行数据规约操作并将结果存入分布式文件系统中。通过上述分析可知,Map阶段和Reduce阶段具有数据依赖关系,即Reduce阶段以Map阶段处理结果作为输入数据。作业是Map/Reduce平台中应用的基本组成单位。一个Map/Reduce作业的执行通常包含一个Map阶段和一个Reduce阶段。作业调度是Map/Reduce平台的核心功能之一,作业调度统一管理Map/Reduce平台的计算资源,为Map/Reduce作业所包含的多个Map和Reduce任务分配其运行所需的计算资源,保证作业公平合理地共享Map/Reduce平台资源,提高作业执行效率。目前针对Map/Reduce作业的调度方法包括先来先服务、能力调度等。这些方法通常将Map任务与Reduce任务分离调度,采用不同的调度策略。对于Map任务,上述调度方法通常优先选择其处理数据所在的节点作为该Map任务的运行节点,从而减少Map任务运行中海量数据传输的时间开销。对于Reduce任务则根据其所属作业的执行进度,从当前空闲资源中为该Reduce任务随机或者按照读取Map任务输出数据代价最小化原则选取运行节点。由于Map/Reduce作业中Map任务与Reduce任务间存在数据依赖关系,现有调度方法对于一个Map/Reduce作业的调度均为首先调度Map任务,当已执行完成的Map任务的数量达到一定阈值(如20%,计算方法为完成的Map任务数除以总Map任务数)时,调度Reduce任务。Reduce任务被调度后,首先读取已完成Map任务产生的输出数据,当所有Map任务所产生的输出数据均读取完毕后,Reduce任务执行其数据处理逻辑。在实际Map/Reduce平台中,属于同一作业的多个Map任务由于执行时间不同,或由于平台资源竞争使得Map任务的启动时间不同,导致Map任务具有不同的执行结束时间。这使得当部分Map任务执行结束,Reduce任务完成从这些Map任务拷贝输出数据后,仍需要等待其他未完成的Map任务执行结束才能继续工作(即拷贝输出数据),而此期间Reduce任务处于空闲等待状态。在现有的调度方法中,当Reduce任务处于空闲等待状态时,并不释放分配给它的计算资源,这大大降低了Map/Reduce平台资源利用率。基于以上不足,本发明提出基于Reduce任务资源抢占的作业调度方法。该方法可以在Reduce任务空闲时将Reduce任务的资源暂时分配给Map任务,从而提高系统的资源利用率,最终缩短作业的运行时间。技术实现要素:本发明的目的是提供一种面向Map/Reduce型海量数据处理平台的作业调度方法,该方法能够在Reduce任务等待获取Map任务的输出数据时,抢占其所占用的计算资源,并分配给待调度的Map任务使用,从而提升平台资源的使用率,提高作业的执行效率。本发明所述的计算资源是支撑Map/Reduce作业所包含的Map任务或Reduce任务运行的物理资源,包括物理内存、CPU等。该方法的运行平台是一个Map/Reduce集群系统,集群系统包括多个服务器(集群节点),服务器通过网络连接。实现该方法的装置包括:作业调度模块、应用管理模块、任务执行模块、节点管理模块。首先将集群节点定义为管理节点和计算节点。管理节点负责作业调度以及平台计算资源管理。计算节点负责执行由管理节点分配的Map任务和Reduce任务。其中作业调度模块运行在管理节点,负责作业调度和回收平台计算资源。应用管理模块、节点管理模块和任务执行模块均运行于计算节点。每个作业对应一个应用管理模块,应用管理模块负责监控和管理Map/Reduce作业所包含的Map任务和Reduce任务的执行过程,每个计算节点运行一个节点管理模块,节点管理模块负责监控其所在计算节点上任务的执行情况,每个正在执行的Map任务和Reduce任务对应一个任务执行模块,任务执行模块负责执行Map任务和Reduce任务;本发明是采用以下技术手段实现的:一种面向Map/Reduce型海量数据处理平台的作业调度方法,包括:抢占资源、作业调度模块、应用管理模块、任务执行模块、节点管理模块、任务挂起与恢复方法、面向抢占资源的作业调度方法,其特征在于包括如下步骤:所述的抢占资源是当Reduce任务等待获取Map任务的输出数据时,该Reduce任务所释放的计算资源;所述的作业调度模块,对Map/Reduce作业所包含的Map任务和Reduce任务进行任务挂起与恢复决策;以任务为单位进行计算资源分配,并将挂起的Reduce任务所释放的资源分配给待调度的Map任务;所述的作业调度模块,保存可用抢占资源信息表、抢占资源使用信息表和待调度任务信息表,可用抢占资源信息表用于记录平台当前可以使用的抢占资源,格式如下:资源号集群节点号可使用资源量挂起Reduce任务号其中,集群节点号是抢占资源所在集群节点的编号,可使用资源量是抢占资源所包含的可以使用的计算资源的数量,挂起Reduce任务号是释放该抢占资源的Reduce任务编号;抢占资源使用信息表用于记录平台当前抢占资源的使用情况,格式如下:资源号任务号资源分配量其中,任务号是使用该抢占资源的任务编号,资源分配量是任务实际占用该抢占资源所包含资源的数量,资源分配量不大于该抢占资源的当前可使用资源量;待调度任务信息表用于记录平台当前需要分配计算资源的Map任务和Reduce任务,格式如下:作业号任务号任务类型资源需求量到达时间其中,任务号和作业号分别表示需要分配计算资源的任务编号和其所属作业的编号,任务类型包括Map任务和Reduce任务,资源需求量表示任务运行所需要的计算资源数量,到达时间表示该任务所属作业到达Map/Reduce平台的时间;所述的应用管理模块,对Map/Reduce作业从提交到结束的整个生命周期进行管理,跟踪记录Map/Reduce作业所包含的Map任务及Reduce任务的状态,包括待调度状态、运行状态、挂起状态和结束状态;所述的应用管理模块保存任务状态信息表,用于记录当前平台中作业的状态及作业运行相关信息,格式如下:其中,任务号和作业号分别表示任务及其所属作业的编号,任务类型包括Map任务和Reduce任务,集群节点号表示该任务运行所在的集群节点编号,执行代码路径表示任务需要运行的代码的存储路径,处理数据文件表示任务需要处理数据所在文件的存储路径,数据起始偏移量和数据结束偏移量分别表示需要处理数据在文件中的起始和结束偏移量;所述的任务执行模块,可对其执行的Reduce任务执行挂起操作,针对挂起的Reduce任务记录其还未拷贝其中间结果数据以及中间结果数据的存储路径信息;所述的节点管理模块,可对所在节点中运行的Map任务和Reduce任务进行监控,触发Reduce任务挂起和释放操作;所述的任务挂起与恢复方法,包括如下步骤:步骤1.1:作业调度模块周期性地执行步骤1.2到步骤1.7;步骤1.2:作业调度模块从应用管理模块获得所有处于运行状态、挂起状态和结束状态的Map和Reduce任务信息,包括任务的任务号、任务所属作业的作业号、任务状态、任务状态记录时间;步骤1.3:作业调度模块根据步骤1.2收集的任务信息,对每一个处于运行状态的Reduce任务计算其数据拷贝剩余处理时间以及与之属于同一Map/Reduce作业的Map任务的剩余执行时间,根据计算结果,选择需要挂起的Reduce任务,方法如下,若不存在需要挂起的Reduce任务,则转至步骤1.5;步骤1.3.1:作业调度模块遍历所有处于运行状态的Reduce任务信息,对每个Reduce任务执行步骤1.3.2至步骤1.3.6;步骤1.3.2:选取所有与该Reduce任务属于同一作业且处于运行状态的Map任务,构成任务集SMap,对于SMap中的每一个Map任务i,计算其剩余执行时间TMLefti,计算方法如下:其中TMLefti代表Map任务剩余执行时间,以毫秒为单位,TMExecutedi代表Map任务已执行时间,以毫秒为单位,PTaski代表Map任务当前执行进度,进度值在(0,1]区间内,本发明将PTaski设定为Map任务已处理数据量与其所需处理的数据总量的比值,PTaski和TMExecutedi是由对应的i任务执行模块统计得出并发送给作业调度模块;步骤1.3.3:统计该Reduce任务所属的作业中处于运行状态的Map任务的最短剩余执行时间TMleft_min,方法如下:TMLeft_min=min{TMLefti|i∈SMap}其中,TMLeft_min代表Map任务剩余执行时间最小值,min表示为对大括号内的所有数值求最小值;步骤1.3.4:计算该Reduce任务拷贝剩余处理时间TRLeft,方法如下:其中TRLeft代表Reduce任务拷贝剩余处理时间,以毫秒为单位,TRFetched代表Reduce任务已执行拷贝操作的时间长度,以毫秒为单位,Numc代表Reduce任务已经拷贝的Map任务的个数,Numt代表与Reduce任务属于同一Map/Reduce作业且已运行结束的Map任务的个数,TRFetched由任务执行模块计算Reduce任务执行拷贝操作的开始时间与当前时间的差值获得,Numc由任务执行模块统计已由Reduce任务完成拷贝其输出数据的Map任务的个数获得,TRFetched和Numc均由任务执行模块推送给作业调度模块,Numt则由作业调度模块根据其收集的任务状态信息,统计与Reduce任务属于同一Map/Reduce作业且处于结束状态的Map任务个数;步骤1.3.5:根据该Reduce任务对应的Map任务剩余执行时间最小值TMLeft_min和该Reduce任务的拷贝剩余处理时间TRLeft,判断该Reduce任务是否满足挂起条件,判断条件如下:其中TMLeft_min代表Map任务剩余执行时间最小值,TRLeft代表Reduce任务拷贝剩余处理时间,Dsuspend代表设定的阈值,取值范围在[0,1]区间内;步骤1.3.6:若该Reduce任务满足挂起条件,则将其标记为“待挂起”;步骤1.4:作业调度模块对每一个标记为“待挂起”的Reduce任务执行挂起操作,并释放挂起Reduce任务所占用的计算资源,方法如下:步骤1.4.1:作业调度模块查找Map/Reduce平台中标记为“待挂起“的Reduce任务,对每一个待挂起Reduce任务,通过应用管理模块通知相应的任务执行模块,判断其是否处于空闲等待状态,判断方法为Reduce任务执行模块查看该模块中所有Map任务输出数据读取线程是否均处于空闲状态,任务执行模块通过应用管理模块向作业调度模块返回查询结果,若是,执行步骤1.4.2至步骤1.4.6;步骤1.4.2:作业调度模块通过应用管理模块向相应的任务执行模块发送Reduce任务挂起的消息,消息格式如下:任务挂起消息标识作业号任务号其中,任务挂起消息标识表示消息类型,任务号和作业号分别表示被挂起Reduce任务的任务编号及其所属Map/Reduce作业的编号;步骤1.4.3:任务执行模块接收到挂起Reduce任务的消息后,将该Reduce任务还未拷贝其输出数据的Map任务列表以及输出数据的存储路径信息,保存在其所在节点的节点管理模块;步骤1.4.4:任务执行模块中止该Reduce任务的运行,并向所在节点的节点管理模块发送Reduce任务挂起消息,消息格式与步骤1.4.2中Reduce任务挂起消息格式相同;步骤1.4.5:节点管理模块向应用管理模块发送Reduce任务挂起消息,消息格式与步骤1.4.2中Reduce任务挂起消息格式相同,应用管理模块收到消息后,将该Reduce任务的状态修改为挂起状态,并记录任务的挂起时间;步骤1.4.6:节点管理模块向作业调度模块发送Reduce任务挂起消息,消息格式与步骤1.4.4中Reduce任务挂起消息格式相同。作业调度模块接收到任务挂起消息后,在可用抢占资源信息表中,为该Reduce任务释放的资源新增一个表记录;步骤1.5:作业调度模块对Map/Reduce平台中每一个处于挂起状态的Reduce任务,统计自Reduce任务最后一次挂起后新增的与该Reduce任务属于同一Map/Reduce作业且已结束的Map任务个数,根据统计结果以及与该Reduce任务属于同一Map/Reduce作业的Map任务总数,选择可以被释放的Reduce任务,若不存在需要释放的Reduce任务,则转至步骤1.7,选择被释放的Reduce任务的方法如下:步骤1.5.1:作业调度模块遍历所有处于挂起状态的Reduce任务,对每一个任务执行步骤1.5.2到1.5.3;步骤1.5.2:对该Reduce任务,判断其是否需要恢复运行,判断条件如下:其中,Ns代表与该Reduce任务属于同一作业且已执行结束的Map任务数,Nf代表与该Reduce任务属于同一作业且Reduce任务已完成对其输出数据拷贝的Map任务数,Nt代表与该Reduce任务属于同一作业的Map任务总数,Dp代表设定阈值,取值范围在[0,1]区间内;其中,Ns-Nf以及Nt的值由应用管理模块计算并发送给作业调度模块,Ns-Nf的计算方法是统计在Reduce任务最后一次挂起的时间点之后所有与之属于同一作业且处于结束状态的Map任务的总数,Nt的计算方法是统计该Reduce任务所在作业的Map任务总数;步骤1.5.3:若该Reduce任务满足释放条件,则将其标记为“待释放”;若不满足释放条件,对该任务的状态不作修改;步骤1.6:作业调度模块对每一个标记为“待释放”Reduce任务,将正在使用其所释放资源的Map任务挂起,将资源重新分配给该挂起Reduce任务,并恢复该Reduce任务的执行,方法如下;步骤1.6.1:作业调度模块查找所有标记为“待释放”的Reduce任务,对每一个待释放的Reduce任务,执行步骤1.6.2到步骤1.6.11;步骤1.6.2:作业调度模块根据Reduce任务号在可用抢占资源信息表中查找该Reduce任务所释放抢占资源的资源号,根据资源号查看抢占资源使用信息表中是否存在使用该Reduce任务所释放抢占资源的记录,若不存在,则转至步骤1.6.9;否则,作业调度模块统计所有正在使用该Reduce任务所释放的抢占资源的Map任务,对每一个Map任务,执行步骤1.6.3到步骤1.6.7;步骤1.6.3:作业调度模块向应用管理模块发送中止该Map任务执行的消息,应用管理模块将该任务中止消息发送给运行该Map任务的任务执行模块,消息格式如下:任务中止消息标识作业号任务号其中,任务中止消息标识表示消息类型,任务号和作业号分别表示被中止的Map任务的任务号及其所属Map/Reduce作业的作业号;步骤1.6.4:任务执行模块接收任务中止消息后,等待Map任务将当前正在处理的数据记录处理完毕后,将Map任务产生的输出数据写入所在计算节点的本地磁盘存储器中,计算该Map任务尚未处理的数据记录在数据文件中的起始偏移量,并将该偏移量信息保存于本节点的节点管理模块中,中止Map任务执行,并向本节点的节点管理模块发送该Map任务中止消息,消息格式与步骤1.6.3相同;步骤1.6.5:节点管理模块接收Map任务中止消息后,向作业调度模块发送Map任务中止消息,并将中止Map任务消息及Map任务尚未处理数据消息发送给应用管理模块。其中,Map任务中止消息格式与步骤1.6.3相同,Map任务尚未处理数据消息格式如下:任务未处理数据消息标识任务号数据处理偏移量其中,任务未处理数据消息标识表示消息类型,任务号表示被中止任务的编号,数据文件偏移量表示该任务尚未处理的数据记录在数据文件中的起始偏移量;步骤1.6.7:作业调度模块接收到节点管理模块发送的Map任务中止信息后,根据任务号查找抢占资源使用信息表中该Map任务对应的抢占资源使用记录,根据资源使用记录中资源号查找可用抢占资源信息表中对应的抢占资源记录,并将该可用抢占资源信息记录中可使用资源量的值修改为当前值与Map任务资源使用量值的和;从抢占资源使用信息表中删除该Map任务对应的资源使用记录;步骤1.6.8:应用管理模块接收到Map任务中止消息及尚未处理数据消息后,将该Map任务的状态改为待调度状态,用所接收的数据处理偏移量信息更新既有的任务数据处理起始偏移量信息,向作业调度模块提交一个计算资源申请消息消息格式如下:作业号任务号资源需求量其中,任务号和作业号分别表示申请计算资源的任务编号以及其所属Map/Reduce作业的编号,资源需求量表示该任务所需要的计算资源数量;步骤1.6.9:作业调度模块根据资源号查看抢占资源使用信息表中是否还存在使用该Reduce任务所释放抢占资源的记录,若存在,则执行步骤1.6.3;若不存在,则执行步骤1.6.10到步骤1.6.11;步骤1.6.10:作业调度模块向管理该Reduce任务的应用管理模块发送任务启动消息,消息格式如下:任务启动消息标识作业号任务号集群节点号其中,任务启动消息标识表示消息类型,任务号和作业号分别表示获得Reduce任务及其所属作业的编号,集群节点号表示Reduce任务运行所在的节点编号;步骤1.6.11:应用管理模块接收任务启动消息,根据作业号和任务号,将任务状态信息表中,对应的任务记录中任务状态修改为运行态,并根据集群节点号向该节点的节点管理模块发送任务执行消息,消息格式如下:其中,任务号和作业号分别表示需要运行的Map任务及其所属作业的编号,任务执行代码路径表示任务需要运行的代码的存储路径,任务处理数据文件表示该Map任务需要处理数据所在文件的存储路径,数据处理起始偏移量和数据以及需要处理数据在文件中的起始偏移量;步骤1.6.12:节点管理模块接收任务启动消息后,启动任务执行模块;任务执行模块从节点管理模块读取Reduce任务挂起时保存的数据拷贝信息,继续从已执行结束且还未拷贝其输出数据的Map任务的运行节点上拷贝输出数据,并根据输出数据存储路径信息存放所拷的数据;步骤1.7:作业调度模块查看是否存在可用的抢占资源;若存在,则执行一次新的面向抢占资源的作业调度;所述的面向抢占资源的作业调度,包括如下步骤:步骤2.1:作业调度模块查看可用抢占资源信息表是否存在可用抢占资源记录,若存在,对每一个可用的抢占资源记录顺序执行步骤2.2到步骤2.4,若不存在,则结束该轮调度;步骤2.2:作业调度模块根据待调度任务信息表,对包含待调度Map任务的作业按照到达时间进行排序,选取最早到达的作业;步骤2.3:对步骤2.2所选取的作业,在其所包含的待调度Map任务中,按照数据本地化、数据本机柜化、数据本交换化的优先级顺序选择Map任务;为所选择的Map任务分配资源且运行任务,直至该可用的抢占资源的可使用资源量均小于作业剩余的待调度Map任务的资源需求量,或该作业中所有待调度Map任务均已获得所需的计算资源,方法如下:步骤2.3.1:在步骤2.2选取作业所包含的待调度Map任务中,选取满足数据本地化条件的Map任务集,数据本地化是Map任务所处理的数据存储于可用资源所在计算节点上;遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求量,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;将该任务的资源需求记录删除;步骤2.3.2:在该作业所包含的待调度Map任务中,选取满足数据本机柜化条件的Map任务集,数据本机柜化是存储Map任务所需处理数据的节点与可用抢占资源所在的计算节点同处于一个机柜中,遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;并将该任务的资源需求记录删除;步骤2.3.3:在该作业所包含的待调度Map任务中,选取满足数据本交换化条件的Map任务集,数据本交换化是存储Map任务处理数据的节点与可用抢占资源所在的计算节点处于不同的机柜中,但可通过同一交换机互连,遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;并将该任务的资源需求记录删除;步骤2.3.4:作业调度模块对步骤2.3.1至步骤2.3.3中所有获得抢占资源的Map任务,向管理该Map任务的应用管理模块发送任务启动消息,消息格式如下:任务启动消息标识作业号任务号集群节点号其中,任务启动消息标识表示消息类型,任务号和作业号分别表示获得抢占资源的Map任务及其所属作业的编号,集群节点号表示Map任务获得资源所在的节点编号;步骤2.3.5:应用管理模块接收任务启动消息,根据作业号和任务号,将任务状态信息表中,对应的任务记录中任务状态修改为运行态,并根据集群节点号向该节点的节点管理模块发送任务执行消息,消息格式如下:其中,任务号和作业号分别表示需要运行的Map任务及其所属作业的编号,任务执行代码路径表示任务需要运行的代码的存储路径,任务处理数据文件表示该Map任务需要处理数据所在文件的存储路径,数据处理起始偏移量和数据以及需要处理数据在文件中的起始偏移量;步骤2.3.6:节点管理模块接收任务执行消息,为Map任务启动一个任务执行模块,任务执行模块根据任务执行消息中所需处理数据文件及起始偏移量的信息,读取数据文件,执行该Map任务;步骤2.4:若该作业中所有待调度Map任务均已获得所需的计算资源,则重复执行步骤2.2到步骤2.3,否则,结束调度。需要说明,在本发明技术方案中,主要包括针对Reduce任务挂起所释放的资源(即抢占资源)的作业调度方法,而对于由于任务正常结束或异常终止而释放的可用资源,可采用既有Map/Reduce平台中所使用的调度方法,这些方法与本方案所提出的抢占资源调度方法不存在矛盾冲突,也即本技术方案可被集成进现有的Map/Reduce平台的作业调度中,从而实现对各类可用资源的完整的调度方案。本发明与现有技术相比,具有以下明显的优势和有益效果:本发明可以应用于数据中心的作业调度和资源管理,通过对于Map/Reduce作业中Reduce任务的抢占调度,实现数据中心计算资源的合理分配,提高计算资源利用率,同时缩短作业运行时间。最终实现数据中心的成本/收益最大化。即在相同的投入成本下(采购、功耗、人力)实现收益的最大化(完成的作业数量)。附图说明图1采用本发明方法的Map/Reduce型数据处理平台系统部署图;图2采用本发明方法的Map/Reduce型数据处理平台系统架构图;图3本发明实现概述-系统启动过程;图4本发明实现概述-接收新提交的Map/Reduce作业过程;图5本发明实现概述-处理运行结束的Map任务和Reduce任务过程;图6本发明实现概述-任务挂起/恢复过程;图7本发明实现概述-面向抢占资源的作业调度过程;图8本发明实现概述-面向常规资源的作业调度过程。具体实施方式下面结合附图和具体实施方式对本发明加以说明。图1是采用本发明方法的Map/Reduce型海量数据处理平台的系统部署图。采用本发明方法的系统可部署于计算机集群上。该集群包含多个服务器(集群节点),服务器间通过网络连接。集群节点分为两类,包括一个管理节点和多个计算节点。采用本发明方法的Map/Reduce型海量数据处理平台包含四个核心模块:作业调度模块、应用管理模块、任务执行模块和节点管理模块。其中,作业调度模块部署于管理节点;应用管理模块、节点管理模块和任务执行模块均部署于计算节点。图2是采用本发明方法的Map/Reduce型海量数据处理平台的系统结构图。其中,作业调度模块负责作业调度和平台计算资源管理。每一个计算节点上运行一个节点管理模块,负责监控本计算节点上任务的执行情况。每一个Map/Reduce作业对应一个应用管理模块,应用管理模块负责监控和管理Map/Reduce作业所包含的Map任务和Reduce任务的执行过程。每个正在执行的Map任务和Reduce任务对应一个任务执行模块,任务执行模块负责执行Map任务和Reduce任务。各模块间可基于TCP/IP网络协议进行通信。本发明所述的计算资源是指支撑Map/Reduce作业所包含的Map任务或Reduce任务运行的物理资源,包括物理内存、CPU等。实现本发明方法主要包括以下动作:系统启动、系统日常运行、任务挂起/恢复、面向抢占资源的作业调度、面向常规资源的作业调度。其中,抢占资源是指当Reduce任务等待获取Map任务的输出数据时,该Reduce任务所释放的计算资源;常规资源是指由Map任务或Reduce任务正常结束或异常中止(而非挂起)所释放的计算资源。在上述动作中,任务挂起/恢复、面向抢占资源的作业调度是本发明方法的核心创新部分。在采用本发明方法的系统中,作业调度模块保存可用抢占资源信息表、可用抢占资源使用信息表和待调度任务信息表,应用管理模块保存任务状态信息表。上述表中各字段占用的字节数如下:字段字节数资源号4作业号4任务号4集群节点号4任务类型1可使用资源量4资源分配量4资源需求量4到达时间12执行代码路径50处理数据文件50数据起始偏移量4数据结束偏移量4在采用本发明方法的系统中可采用基于TCP/IP网络协议进行模块间的消息通信。各类消息中消息标识可用字符串表示,格式如“消息来源_消息类型”。其中,消息来源标识不同的消息发送方,占用2个字节,可设置的值及含义如下:消息类型部分占用3个字节,可设置的值及含义如下:消息类型值含义‘000’任务挂起消息‘001’任务中止消息‘010’任务未处理数据消息‘011’任务启动消息‘100’任务执行消息各类消息中,除了消息标识外,其他消息字段均以字符串表示,占用的字节数如下:消息字段字节数作业号5任务号5集群节点号4任务类型1任务状态1执行代码路径50处理数据文件50数据处理起始偏移量5数据处理结束偏移量5资源需求量5在采用本发明方法的系统中,如图3所示,系统启动过程主要包括三个步骤:步骤S1:启动Map/Reduce平台管理节点和计算节点;步骤S2:在管理节点上启动作业调度模块;步骤S3:在计算节点上启动节点管理模块。在采用本发明方法的系统中,系统日常运行主要包括接收新提交的Map/Reduce作业和处理运行结束的Map任务和Reduce任务。在采用本发明方法的系统中,如图4所示,接收新提交的Map/Reduce作业过程主要包括五个步骤。步骤S1:作业调度模块接收新提交的Map/Reduce作业,解析作业信息,包括作业的资源需求信息、作业执行代码信息和作业处理数据信息;步骤S2:作业调度模块选择一个计算节点,启动一个应用管理模块,并将该作业的资源需求信息、执行代码信息和处理数据信息发送给该应用管理模块;步骤S3:应用管理模块在任务状态表中为该作业所包含的每一个Map任务和Reduce任务创建一个任务记录,并将任务的状态设置为待调度态;步骤S4:应用管理模块根据任务的资源需求,以任务为单位,向作业调度模块发送资源请求;步骤5:作业调度模块接收请求并触发面向抢占资源的作业调度和面向常规资源的作业调度。在采用本发明方法的系统中,如图5所示,处理运行结束的Map任务和Reduce任务过程主要包括四个步骤。步骤S1:运行Map或Reduce任务的任务执行模块向所在节点的节点管理模块发送任务运行结束消息;步骤S2:节点管理模块接收任务运行结束消息,并将结束任务的任务号信息发送给作业调度模块;步骤S3:作业调度模块根据接收到的任务号信息,在其维护的常规资源使用记录表和抢占资源使用记录表中查找该任务对应的资源使用记录并删除该记录,根据任务使用的资源类型,在可用常规资源记录表或可用抢占资源记录表中增加该任务所释放的资源信息,并向该任务所属的应用管理模块发送任务结束信息;步骤S3:应用管理模块接收到任务结束消息,将该任务的状态修改为结束状态。在采用本发明方法的系统中,任务挂起/恢复过程是由作业调度模块周期性触发执行,执行周期可设定。如图6所示,每次执行的过程主要包括六个步骤。步骤S1:作业调度模块从应用管理模块获得所有处于运行状态、挂起状态和结束状态的Map和Reduce任务信息,包括任务的任务号、任务状态、任务状态记录时间及任务所属作业的作业号信息;步骤S2:作业调度模块对每一个处于运行状态的Reduce任务计算其数据拷贝剩余处理时间以及与之属于同一Map/Reduce作业的Map任务的剩余执行时间,根据计算结果,选择需要挂起的Reduce任务;步骤S3:作业调度模块对每一个标记为待挂起状态的Reduce任务执行挂起操作,并释放挂起Reduce任务所占用的计算资源;步骤S4:作业调度模块对Map/Reduce平台中每一个处于挂起状态的Reduce任务,统计自Reduce任务最后一次挂起后新增的与该Reduce任务属于同一Map/Reduce作业且已运行结束的Map任务个数,根据统计信息以及与该Reduce任务属于同一Map/Reduce作业的Map任务总数信息,选择可以被释放的Reduce任务;步骤S5:作业调度模块对每一个待释放的Reduce任务,将正在使用其所释放资源的Map任务挂起,将资源重新分配给该挂起Reduce任务,并恢复该Reduce任务的执行;步骤S6:作业调度模块查看是否存在可用的抢占资源;若上述条件成立,则执行一次新的面向抢占资源的作业调度。在任务挂起/恢复过程中,步骤S2的具体实施包含六个步骤:步骤S21:作业调度模块遍历所有处于运行状态的Reduce任务信息,对每个Reduce任务执行步骤S22至步骤S26;步骤S22:选取所有与该Reduce任务属于同一作业且处于运行状态的Map任务,构成任务集SMap,对于SMap中的每一个Map任务i,按照公式计算其剩余执行时间TMLefti。其中,TMLefti代表Map任务剩余执行时间,以毫秒为单位,TMExecutedi代表Map任务已执行时间,以毫秒为单位,PTaski代表Map任务当前执行进度,进度值在[0,1]区间内。本发明将PTaski设定为Map任务已处理数据量与其所需处理的数据总量的比值,PTaski和TMExecutedi可由相应的任务执行模块统计得出并发送给作业调度模块;步骤S23:在步骤S22的基础上,按照计算公式TMLeft_min=min{TMLefti|i∈SMap},统计该Reduce任务所属的作业中处于运行状态的Map任务的最短剩余执行时间TMleft_min。其中,TMLeft_min代表Map任务剩余执行时间最小值,min代表对大括号内的所有数值求最小值的方法;步骤S24:按照计算公式计算Reduce任务拷贝剩余处理时间TRLeft。其中,TRLeft代表Reduce任务拷贝剩余处理时间,以毫秒为单位,TRFetched代表Reduce任务已执行拷贝操作的时间长度,以毫秒为单位,Numc代表Reduce任务已经拷贝的Map任务的个数,Numt代表与Reduce任务属于同一Map/Reduce作业且已运行结束的Map任务的个数,TRFetched由相应的任务执行模块计算Reduce任务执行拷贝操作的开始时间与当前时间的差值获得,Numc由相应的任务执行模块统计已由Reduce任务完成拷贝其中间数据的Map任务的个数获得,TRFetched和Numc均由任务执行模块推送给作业调度模块,Numt则由作业调度模块根据其收集的任务状态信息,统计与Reduce任务属于同一Map/Reduce作业且处于结束状态的Map任务个数;步骤S25:根据该Reduce任务对应的Map任务剩余执行时间最小值TMLeft_min和该Reduce任务的拷贝剩余处理时间TRLeft,按照判断公式判断该Reduce任务是否满足挂起条件。其中,TMLeft_min代表Map任务剩余执行时间最小值,TRLeft代表Reduce任务拷贝剩余处理时间,Dsuspend代表设定的阈值;步骤S26:若该Reduce任务满足挂起条件,则将其标记为待挂起状态。在任务挂起/恢复过程中,步骤S3的具体实施包含六个步骤:步骤S31:作业调度模块查找Map/Reduce平台中标记为待挂起的Reduce任务,对每一个待挂起Reduce任务,通过应用管理模块通知相应的任务执行模块,判断其是否处于空闲等待状态,判断方法为Reduce任务执行模块查看该模块中所有中间数据读取线程是否均处于空闲状态,任务执行模块通过应用管理模块向作业调度模块返回查询结果,若是,执行步骤S32至步骤S36;步骤S32:作业调度模块通过应用管理模块向相应的任务执行模块发送挂起Reduce任务的消息;步骤S33:任务执行模块接收到挂起Reduce任务的消息后,将该Reduce任务数据拷贝的信息,包括还未拷贝其输出数据的Map任务列表以及输出数据的存储路径信息,保存于其所在节点的节点管理模块;步骤S34:任务执行模块中止该Reduce任务的运行,并通知所在节点的节点管理模块该Reduce任务已挂起;步骤S35:节点管理模块向相应的应用管理模块发送Reduce任务挂起消息,应用管理模块收到消息后,将该Reduce任务的状态修改为挂起状态,并记录任务的挂起时间;步骤S36:节点管理模块向作业调度模块发送Reduce任务挂起消息,作业调度模块接收到任务挂起消息后,在可用抢占资源记录表中,为该Reduce任务释放的资源新增一个记录。在任务挂起/恢复过程中,步骤S4的具体实施包含六个步骤:步骤S41:作业调度模块遍历所有处于挂起状态的Reduce任务,对每一个任务执行步骤S42到步骤S43;步骤S42:对该Reduce任务,根据公式判断其是否需要被释放,重新投入运行。其中,Ns代表与该Reduce任务属于同一作业且已执行结束的Map任务数,Nf代表与该Reduce任务属于同一作业且Reduce任务已完成对其产生的输出数据拷贝的Map任务数,Nt代表与该Reduce任务属于同一作业的Map任务总数,Dp代表设定阈值,其取值范围在[0,1]区间内,该阈值可以设置。其中,Ns-Nf以及Nt的值可由应用管理模块计算并发送给作业调度模块,计算方法是根据Reduce任务最后一次挂起的时间,计算所有与之属于同一作业且在该时间点后处于结束状态的Map任务的个数,即为Ns-Nf的值,Nt可由应用管理模块根据其保存的作业包含的任务信息获得;步骤S43:若该Reduce任务满足释放条件,则将其标记为“待释放”,若不满足释放条件,对该任务的状态不作修改。在任务挂起/恢复过程中,步骤S5的具体实施包含十一个步骤:步骤S51:作业调度模块查找所有标记为待释放的Reduce任务,对每一个待释放Reduce任务,执行步骤S52到步骤S510;步骤S52:作业调度模块根据Reduce任务号在可用抢占资源信息表中查找该Reduce任务所释放抢占资源的资源号,根据资源号查看抢占资源使用信息表中是否存在使用该Reduce任务所释放抢占资源的记录,若不存在,则转至步骤S59;步骤S53:作业调度模块查找正在使用该Reduce任务所释放资源的Map任务,对于每一个Map任务,执行步骤S54到步骤S58;步骤S54:作业调度模块通知相应的应用管理模块中止该Map任务的执行,应用管理模块则将任务中止消息发送给运行该Map任务的任务执行模块;步骤S55:任务执行模块接收任务中止消息后,等待Map任务将当前正在处理的数据记录处理完毕后,将Map任务产生的输出数据写入本地磁盘中,计算该Map任务尚未处理的数据记录在数据文件中的起始偏移量,并将该偏移量信息保存于本节点的节点管理模块中,中止Map任务执行,并向本节点的节点管理模块发送该Map任务中止消息;步骤S56:节点管理模块接收Map任务中止消息后,将Map任务所占用的资源标记为可用资源,并将Map任务中止消息及可用资源消息发送给作业调度模块,将中止Map任务信息及其尚未处理数据的起始偏移量信息发送给应用管理模块;步骤S57:作业调度模块接收到节点管理模块发送的Map任务中止信息后,根据任务号查找抢占资源使用信息表中该Map任务对应的抢占资源使用记录,根据资源使用记录中资源号查找可用抢占资源信息表中对应的抢占资源记录,并将该可用抢占资源信息记录中可使用资源量的值修改为当前值与Map任务资源使用量值的和;从抢占资源使用信息表中删除该Map任务对应的资源使用记录;步骤S58:应用管理模块接收到Map任务中止消息及尚未处理数据消息后,将该Map任务的状态改为待调度状态,用所接收的数据处理偏移量信息更新既有的任务数据处理起始偏移量信息,向作业调度模块提交一个计算资源申请消息消息;步骤S59:作业调度模块向管理该Reduce任务的应用管理模块发送任务启动消息;步骤S510:节点管理模块接收任务启动消息后,启动任务执行模块;任务执行模块从节点管理模块读取Reduce任务挂起时保存的数据拷贝信息,继续从已执行结束且还未拷贝其输出数据的Map任务的运行节点上拷贝输出数据,并根据输出数据存储路径信息存放所拷的数据。在采用本发明方法的系统中,如图7所示,面向抢占资源的作业调度过程主要包括四个步骤:步骤S1:作业调度模块查看可用抢占资源记录表,判断是否存在可用的抢占资源,若存在,对每一个可用的抢占资源顺序执行步骤S2到步骤S4;步骤S2:作业调度模块对所有待调度的Map/Reduce作业按照到达调度系统的时间进行排序,选取包含待调度Map任务且最早到达的作业;步骤S3:对步骤S2所选取的作业,在其所包含的待调度Map任务中,按照数据本地化、数据本机柜化、数据本交换化的优先级顺序选择Map任务,为其分配资源并部署和运行任务,直至该可用的抢占资源无法满足作业剩余的待调度Map任务的资源需求,或该作业中所有待调度Map任务均已获得所需的计算资源;步骤S4:若该作业中所有待调度Map任务均已获得所需的计算资源,则重复执行步骤S2到步骤S3,否则,结束调度。在面向抢占资源的作业调度过程中,步骤S3的具体实施包含五个步骤:步骤S31:在步骤2.2选取作业所包含的待调度Map任务中,选取满足数据本地化条件的Map任务集,数据本地化是指Map任务所处理的数据存储于可用资源所在计算节点上;遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求量,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;将该任务的资源需求记录删除;步骤S32:在该作业所包含的待调度Map任务中,选取满足数据本机柜化条件的Map任务集,数据本机柜化是指存储Map任务所需处理数据的节点与可用抢占资源所在的计算节点同处于一个机柜中,遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;并将该任务的资源需求记录删除;步骤S33:在该作业所包含的待调度Map任务中,选取满足数据本交换化条件的Map任务集,数据本交换化是指存储Map任务处理数据的节点与可用抢占资源所在的计算节点处于不同的机柜中,但可通过同一交换机互连,遍历该Map任务集,对每一个Map任务判断该抢占资源的可使用资源量是否大于Map任务的资源需求,若大于,则为该Map任务在抢占资源使用信息表中增加一个资源使用记录,其中资源使用份额即为该Map任务计算资源需求的数量,并在可用抢占资源信息表中,将该抢占资源的可使用资源量值修改为当前值与Map任务资源使用份额的差值;并将该任务的资源需求记录删除;步骤S34:作业调度模块将步骤S31至步骤S33中所有获得资源的Map任务及其所获得资源的信息,发送给相应的应用管理模块,并在抢占资源使用记录表中新增相应的资源使用记录;步骤S35:应用管理模块接收任务启动消息,根据作业号和任务号,将任务状态信息表中,对应的任务记录中任务状态修改为运行态,并根据集群节点号向该节点的节点管理模块发送任务执行消息;步骤S35:节点管理模块接收任务执行消息,为Map任务启动一个任务执行模块,任务执行模块根据任务执行消息中所需处理数据文件及起始偏移量,读取数据文件,执行该Map任务。在采用本发明方法的系统中,作业调度模块可保存可用常规资源信息表以及常规资源使用信息表。可用常规资源信息表格式如下:资源号集群节点号可使用资源量常规资源使用信息表格式如下:资源号任务号资源分配量在采用本发明方法的系统中,如图8所示,面向常规资源的作业调度过程主要包括七个步骤。步骤S1:作业调度模块查看可用常规资源记录表,判断是否存在可用的常规资源,若存在,对每一个可用的常规资源顺序步骤S2到步骤S7;步骤S2:作业调度模块对所有待调度的Map/Reduce作业按照到达调度系统的时间进行排序,选取包含待调度任务且最早到达的作业;步骤S3:作业调度模块从应用管理模块获得步骤S2所选取的作业中包含的Map任务总数信息以及已经处于运行态或者结束态的Map任务总数信息,判断若该作业已经处于运行态或者结束态的Map任务总数占其包含的Map任务数的比例达到一定的阈值,则选取一个该作业所包含的待调度Reduce任务为其分配资源;步骤S4:若尚存在可用的常规资源,则作业调度模块在步骤S2选取的作业所包含的待调度Map任务中,按照数据本地化、数据本机柜化、数据本交换化的优先级顺序选择Map任务,为其分配资源,直至该可用的抢占资源无法满足作业剩余的待调度Map任务的资源需求,或该作业中所有待调度Map任务均已获得所需的计算资源。此处,数据本地化、数据本机柜化和数据本交换化的定义与面向抢占资源的作业调度过程中步骤S3相同,此处不再赘述;步骤S5:作业调度模块将步骤S3至步骤S4中所有获得资源的Map任务和Reduce任务及其所获得资源的信息,发送给相应的应用管理模块,并在常规资源使用记录表中增加相应的资源使用记录;步骤S6:应用管理模块根据Map任务或Reduce任务所获得资源的信息,向资源所在节点的节点管理模块发送Map任务或Reduce任务启动请求,节点管理模块为Map任务或Reduce任务启动一个任务执行模块执行任务;步骤S7:若该作业中所有待调度任务均已获得所需的计算资源,则重复执行步骤S2到步骤S7。根据本发明所提出的优化调度方法,发明人做了相关的性能测试。测试结果表明,本发明方法可适用于多种Map/Reduce应用负载,包括单类Map/Reduce应用负载和多类Map/Reduce应用混合负载。采用本发明方法的Map/Reduce型海量数据处理平台较既有主流Map/Reduce型海量数据处理平台,如Hadoop,可较好地提升作业执行效率。性能测试将依据本发明的具体实施方案所实现的Map/Reduce型海量数据处理平台Predoop与主流Map/Reduce型海量数据处理平台Hadoop进行性能比较。其中,Hadoop平台选取最为典型的基于先来先服务的调度方法。参照Hadoop平台,测试选取内存资源作为管理和分配的物理资源,并选取作业平均响应时间作为测试的性能指标,以秒为单位。性能测试运行于由13个计算节点构成的集群系统,计算节点的硬件配置包括:2个Intel(R)Pentium(R)4cpu、3GBDDR2RAM、160GBSATA硬盘,操作系统为Linux。本性能测试选取WordCount和Sort作为单类Map/Reduce应用负载,选取Swim负载发生器自动生成多类Map/Reduce应用的人工合成混合负载。Swim可根据不同的集群规模生成相应规模的Map/Reduce应用负载,并且所生成的Map/Reduce应用混合负载,遵循Facebook,Yahoo等公司的生产性平台中Map/Reduce应用负载特征,包括应用输入数据规模、输出数据规模、Map任务输出数据规模、Map/Reduce作业中包含Map和Reduce任务的个数等。因此,所生成的负载具有较好的代表性和真实性。本测试中,Map任务和Reduce任务的处理逻辑均设为循环累加。单类Map/Reduce应用负载测试对单类Map/Reduce应用负载的测试中,设置Map任务和Reduce任务的内存需求分别为1GB,设置Reduce任务挂起判断条件中阈值Dsuspend为20%,设置挂起的Reduce任务释放判断条件中阈值Dp为40%。选取应用输入数据规模分别为8GB,10GB,12GB,14GB,16GB。表1单类Map/Reduce应用负载WordCount性能测试结果表2单类Map/Reduce应用负载Sort性能测试结果从表1和表2可以看出,在各类作业处理数据规模的场景下,Predoop的性能均优于Hadoop,作业平均响应时间最大降低66.57%。多类Map/Reduce应用混合负载测试利用Swim负载发生器产生四组适用于13个计算节点规模集群的混合负载,分别为负载1、负载2、负载3、负载4。所生成混合负载的特征如下:对多类Map/Reduce应用混合负载的测试中,设置Reduce任务挂起判断条件中阈值Dsuspend为20%,设置挂起的Reduce任务释放判断条件中阈值Dp为40%。为了模拟多Map/Reduce应用资源竞争的场景,本测试分别设置Map任务和Reduce任务的内存需求量为512MB、1GB和1.5GB。表3多类Map/Reduce应用混合负载性能测试结果从表3可以看出,在3种资源竞争的场景下,Predoop的性能均优于Hadoop,作业平均响应时间最大降低49.9%。随着任务内存需求量增加,也即资源竞争强度增强,作业平均响应时间的平均下降率从18.74%增加至25%。阈值变动测试根据本发明方法所述,Reduce任务挂起判断条件中阈值Dsuspend和挂起的Reduce任务释放判断条件中阈值Dp的设置将对本发明方法取得的优化效果产生影响。本测试选取多类Map/Reduce应用混合负载中的负载1和负载4,设置任务内存需求为1GB,并在[0,1]区间内选取不同的阈值设置,观测所取得的性能结果。本测试首先设置Dp为40%,分别设置Dsuspend为10%、20%、30%、40%、50%、70%,观测性能结果;其次设置Dsuspend为20%,分别设置Dp为20%、40%、60%、80%、100%观测性能结果。表3和表4分别给出上述两个阈值变动测试中,Predoop平台较Hadoop平台,在作业平均响应时间上的下降率。表4不同阈值Dsuspend设置下性能测试结果10%20%30%40%50%70%负载112.23%12.24%21.02%23.55%17.73%15.90%负载49.48%26.62%22.86%13.01%11.68%7.46%表5不同阈值Dp设置下性能测试结果20%40%60%80%100%负载137.93%47.75%26.63%13.34%13%负载439.46%26.87%58.18%41.78%29.23%从表4和表5以看出,在不同的阈值设置下,Predoop平台的性能均优于Hadoop平台,作业平均响应时间最大减少58.18%。可扩展性测试本测试选取不同的集群系统规模(即不同的集群计算节点数量),进行可扩展性测试。本测试分别选取集群系统规模为4、6、8、10、12,并利用SWIM负载发生器,根据集群规模,生成相应的混合负载。本测试设置Map任务和Reduce任务的内存需求分别为1GB,设置Reduce任务挂起判断条件中阈值Dsuspend为20%,设置挂起的Reduce任务释放判断条件中阈值Dp为40%。表6不同集群规模下的性能测试结果从表6可以看出,在不同的集群规模下,Predoop平台的性能均优于Hadoop平台,作业平均响应时间最大减少46.29%,平均减少34.31%。最后应说明的是:以上示例仅用以说明本发明而并非限制本发明所描述的技术,而一切不脱离发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1