《一种基于带宽感知的HADOOP调度方法和系统.pdf》由会员分享,可在线阅读,更多相关《一种基于带宽感知的HADOOP调度方法和系统.pdf(14页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104102533A43申请公布日20141015CN104102533A21申请号201410270693622申请日20140617G06F9/4620060171申请人华中科技大学地址430074湖北省武汉市洪山区珞喻路1037号72发明人戴彬秦鹏邵翔邹云飞74专利代理机构华中科技大学专利中心42201代理人朱仁玲54发明名称一种基于带宽感知的HADOOP调度方法和系统57摘要本发明公开了一种基于带宽感知的HADOOP调度方法,包括对HADOOP任务调度建立一个作业时间完成模型,为HADOOP调度系统建立一个数学模型,将HADOOP的任务调度问题转化为一个为待调度的作业。
2、寻找一个使得该作业的作业完成时间最短的任务调度方法的问题;利用SDN提供的实时网络管理与流量控制功能,提出了一种基于时隙的网络带宽分配机制,将每一条链路的剩余带宽的占用期划分为相等的时隙,在作业完成时间模型和网络时隙带宽分配机制的基础之上;在为某个任务分配计算节点之前,综合考虑任务的本地性与实施网络带宽情况,为每一个任务分配一个能够提供最早完成时间的计算节点。本发明解决了现有方法中不能同时从全局视角和实际网络可用带宽两方面进行任务调度的问题。51INTCL权利要求书3页说明书7页附图3页19中华人民共和国国家知识产权局12发明专利申请权利要求书3页说明书7页附图3页10申请公布号CN10410。
3、2533ACN104102533A1/3页21一种基于带宽感知的HADOOP调度方法,其特征在于,包括以下步骤1接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程2将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;3接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的状态信息,从作业队列中提取出待调度的作业;4在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入步骤6,否则进入步骤5;5对于该待调度的作。
4、业进行预分配计算操作,为该待调度的作业在作业调度池中新建一个任务调度映射;6在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,若该映射不为空,则进入步骤7,否则,进入步骤8;7从待调度的作业所对应的任务调度映射中,提取出步骤3中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入步骤3;8若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结。
5、果进行归约计算,并且将归约计算的结果返回给用户。2根据权利要求1所述的HADOOP调度方法,其特征在于,在作业分配池中,对于每一个待调度的作业都维护了一个任务调度映射,该映射的键是计算节点的名字,该映射的值是预先分配给该计算节点的计算任务队列,每当有一个计算节点发起了分配任务的请求之后,从作业管理队列中抽取出一个带调度的作业,查询该作业维护的任务调度映射,在该任务调度映射中以发起分配任务请求的任务节点的名字为键,提取出该键对应的值,即是预先分配给该计算节点的计算任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进给发起分配任务的请求的计算节点的返回信息中,返回给该计算节点来执行。
6、,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列。3根据权利要求1或2所述的HADOOP调度方法,其特征在于,步骤5具体包括以下子步骤51计算出整个HADOOP计算集群中各个节点的当前负载情况,然后再估算出当前负载的剩余执行时间,从而得到各个节点的空闲时间;52与命名节点进行通信,获取当前待调度作业的输入数据的数据副本备份情况,解析与转储该信息;53与SDN控制器进行通信,来获取网络实时带宽信息,计算出数据搬移时间,54接收51步骤传入的集群节点空闲时间信息,接收52步骤数据传入的输入数据块副本信息,接收53步骤传入的网络带宽。
7、及数据搬移时间信息,综合三者进行计算处理,为每一个任务分配一个当前最优的计算节点,权利要求书CN104102533A2/3页355在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调度映射。4根据权利要求3所述的HADOOP调度方法,其特征在于,步骤51具体为,监控与记录整个计算集群中每一个计算节点的当前运行计算情况,获取每一个计算节点当前运行的PROGRESS值,PROGRESS表示一个任务已执行完计算操作的数据大小占整个数据块大小的百分比,由此可以估算出任务完成时间,计算公式为TETSTNTS/PROGRESS,其中TE表示预估的任务完成时间,TS表示任务开始执行的时间,TN。
8、为系统当前时间。5根据权利要求3所述的HADOOP调度方法,其特征在于,步骤53具体为,调用SDN控制器的API,来获取网络实时带宽信息,得到实施带宽存储起来,定义数据搬移时间为任务对应的数据从数据源节点搬移到数据计算节点上所消耗的时间,则该数据搬移时间可以通过公式TMDS/BW,其中TM表示数据搬移时间,DS表示数据块大小,该大小可以在配置文件中设定,BW表示实时带宽大小情况。6根据权利要求3所述的HADOOP调度方法,其特征在于,步骤54具体包括以下子步骤541在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下此时的节点空闲时间RIMINNOW;542在整个计算集群中找到最早可。
9、用的本地节点作为最优本地节点,记录下此时的节点空闲时间RIMINLOC;543比较步骤541和步骤542查询到的节点是否为同一节点,若是,定义最优本地节点为最优节点,进入步骤545,若否,进入步骤544;544比较若将任务分别分配给这两个计算节点,这两个计算节点上的任务完成时间哪个更早,即比较RIMINNOWTM与RIMINLOC的大小,小的即说明任务结束得更早,定义该节点为最优节点,545将待分配的任务分配给该最优节点。7根据权利要求6所述的HADOOP调度方法,其特征在于,在为计算节点分配远程任务的时候,还负责进行时隙预留划分,当某个远程任务需要进行数据搬移时,记录下待搬移的任务数据所搬移。
10、的源节点NDDATASRC和终节点NDMINNOW,将这些信息封装成一个流表FLOWTABLE,FLOWTABLE包头域记录了NDDATASRC和终节点NDMINNOW的信息,该流表信息发送给SDN控制器,SDN控制器会将该流表下发到相应的SDN交换机中,当SDN交换机检查到该流表对于的流时,优先保证该数据的搬移操作。8根据权利要求8所述的HADOOP调度方法,其特征在于,若任务TKI被分配到在了节点NDJ上计算,而TKI的输入数据存放在TKI节点NDDATASRC上,则在执行任务时,输入数据需要从NDDATASRC搬移到NDJ上,定义TMI,J为该数据搬移时间;任务从开始计算到计算完毕之间的。
11、时间差为任务的计算时间,定义TPI,J为该任务的计算时间;从任务被分配到某个计算节点上开始,任务就会占用该计算节点的计算资源,任务实际占用计算资源的时间为从任务被分配的时间到任务计算完毕的时间之间的时间差,定义TEI,J为该任务的实际执行时间,其中,这几个时间满足公公式TEI,JTPI,JTMI,J,当计算数据位于处理计算任务的节点上的时候,定义该计算节点为本地节点,否则,定义该计算节点为远程节点。9根据权利要求3所述的HADOOP调度方法,其特征在于,步骤55具体为,在该任务权利要求书CN104102533A3/3页4映射中,若计算出来的最优计算节点的键不存在,则以该计算出来的最优计算节点的。
12、名字为键新建一个键值对,再将该任务添加到值当中,若计算出来的最优计算节点的键存在,则查找到该键对应的键值对,将任务添加到值上的任务队列后面。10一种基于带宽感知的HADOOP调度系统,其特征在于,包括以下模块第一模块,接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的状态信息,从作业队列中提取出待调。
13、度的作业;第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入第六模块,否则进入第五模块;第五模块,对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度池中新建一个任务调度映射;第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块;第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列。
14、中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入第三模块;第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。权利要求书CN104102533A1/7页5一种基于带宽感知的HADOOP调度方法和系统技术领域0001本发明属于信息处理与数据计算领域,更具体地,涉及一种基于带宽感知的HADOOP调度方法和系统。背景技术0002随着科学技术的进步,互联网技术得到了高速的发展,这在推动了社会发展的同时,也极大地丰富了人们的网络生活。而WEB20的到来,互联网更是发生了翻天覆地的变化。WEB2。
15、0的一个突出特点是用户原创内容USERGENERATEDCONTENT,大量的用户原创内容使得数据出现了爆炸性的增长。在面向大规模数据处理技术的挑战面前,云计算作为计算和处理大规模数据的一种新的模型被提了出来。得益于分布式和虚拟化等多项技术的联合演进,云计算作为一种新型大数据处理模型产生了。云计算采取集群计算的概念,将计算任务分布给大规模计算机集群组成的计算能力池中,使得数据处理需求和应用系统能够根据自己的实际需求来动态的获取计算能力及存储资源等。0003到目前为止,全世界范围内大部分的云计算系统采取的都是基于MAPREDUCE计算模型和分布式文件存储系统,这主要模仿实现了GOOGLE的云计算。
16、核心技术。GOOGLE的云计算核心主要包括以下三个部分分布式结构化数据存储系统BIGTABLE、GFSGOOGLEFILESYSTEM以及分布式计算模型MAPREDUCE。然而GOOGLE作为一家商业公司,是不可能公开其技术细节的。对于想要继续研究和发展云计算的个人或者科研团体来说,无法获得更多的了解。开源的云计算系统HADOOP则弥补了这一缺陷,在2005年,APACHE基金会将一个开源项目NUTCH的一部分单独推出来,并给与资金资助。HADOOP的设计理念是GOOGLE的云计算核心技术,它是一个开源框架,该框架支持海量数据处理应用程序的操作。HADOOP的核心包括了分布式文件系统HDFS和。
17、并行编程框架MAPREDUCE,HDFS在集群中实现了GFS,并且支持在集群中对文件的读写和传输等操作;MAPREDUCE则在集群中完成了分布式计算功能,它利用HDFS提供的文件处理能力,实现了任务的初始化、调度、运行等功能。0004HADOOP的搭建不需要超级计算机,可以将其部署在由大量廉价的硬件设备组成的计算机集群中。HADOOP平台封装了其繁复的底层实现细节,仅仅为其上运行的应用程序提供稳定的API接口,这个实现方式屏蔽了底层对数据的并行处理的细节,如输入数据的分割和备份、集群的调度、容错和监控等。HADOOP的开发人员在开发的过程中,可以不必关注太多底层架构细节,而把精力集中在程序的核。
18、心部分上面,像开发普通程序一样来开发云计算应用程序。这种方式大大地降低了应用程序的开发压力,显著提升了开发的效率。同时为了增强整个HADOOP框架的易用性,HADOOP开源库在应用层提供了丰富完整的容错能力,整个集群中的每一个节点都可以独立地对作业运行可能出现的失败情况进行处理。HADOOP开发框架以其稳定、廉价以及高效地特点深受研究者和开发者的欢迎,被广泛应用在搜索引擎、商业数据挖掘、广告营销效果分析、生物信息分析、网站日志分析与存储等应用领域。0005虽然作为目前得到最广泛应用的开源云计算平台,但毕竟从APACHE基金会推出HADOOP平台到目前为止不过短短数年,即使得到了学术界和工业界的。
19、共同重视,在很多地说明书CN104102533A2/7页6方,HADOOP平台仍存在着完善的必要性和可能性。在这其中,最重要的问题是任务调度问题。作为HADOOP系统中的一个至关重要的关键技术,任务调度负责对计算资源和作业运行进行调度,调度结果会直接影响HADOOP系统的计算性能和HADOOP系统的计算资源利用效率。然而目前业界对作业调度技术的研究尚处于基础阶段,在日益复杂的网络环境和多种多样的应用场景的面前,现有的各种作业调度算法仍然存在着HADOOP系统的作业响应时间过慢、HADOOP平台的执行能力和交互能力差、以及HADOOP系统资源的利用率低的技术问题。发明内容0006针对现有技术的以。
20、上缺陷或改进需求,本发明提供了一种基于带宽感知的HADOOP调度方法和系统,其目的在于,解决现有HADOOP调度算法中的作业响应时间过慢、HADOOP平台整体性能过低的技术问题。0007为实现上述目的,按照本发明的一个方面,提供了一种基于带宽感知的HADOOP调度方法,包括以下步骤00081接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程00092将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;00103接收计算节点发来的心跳包。
21、,提取出该心跳包中包含的计算节点当前所处的状态信息,从作业队列中提取出待调度的作业;00114在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入步骤6,否则进入步骤5;00125对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度池中新建一个任务调度映射;00136在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,若该映射不为空,则进入步骤7,否则,进入步骤8;00147从待调度的作业所对应的任务调度映射中,提取出步骤3中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给。
22、该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入步骤3;00158若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。0016优选地,在步骤3中,在作业分配池中,对于每一个待调度的作业都维护了一个任务调度映射,该映射的键是计算节点的名字,该映射的值是预先分配给该计算节点的计算任务队列。每当有一个计算节点发起了分配任务的请求之后,从作业管理队列中抽取出一个带调度的作业,查询该作业维护的任务调度映射。在该任务调度映射中以发起分配任务请。
23、求的任务节点的名字为键,提取出该键对应的值,即是预先分配给该计算节点的计算任务队列。依据该计算节点的计算能力,将该任务队列的整体或者部分封装进给发起分配说明书CN104102533A3/7页7任务的请求的计算节点的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列。0017优选地,步骤5具体包括以下子步骤001851计算出整个HADOOP计算集群中各个节点的当前负载情况,然后再估算出当前负载的剩余执行时间,从而得到各个节点的空闲时间;001952与命名节点进行通信,获取当前待调度作业的输入数据的。
24、数据副本备份情况,解析与转储该信息;002053与SDN控制器进行通信,来获取网络实时带宽信息,计算出数据搬移时间。调用SDN控制器NOX的API,来获取网络实时带宽信息,得到实施带宽存储起来。定义数据搬移时间为任务对应的数据从数据源节点搬移到数据计算节点上所消耗的时间,则该数据搬移时间可以通过公式TMDS/BW,其中TM表示数据搬移时间,DS表示数据块大小,该大小可以在配置文件中设定,BW表示实时带宽大小情况。002154接收51步骤传入的集群节点空闲时间信息,接收52步骤数据传入的输入数据块副本信息,接收53步骤传入的网络带宽及数据搬移时间信息,综合三者进行计算处理,为每一个任务分配一个当。
25、前最优的计算节点。002255在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调度映射。0023优选地,在步骤51具体为,监控与记录整个计算集群中每一个计算节点的当前运行计算情况,获取每一个计算节点当前运行的PROGRESS值。PROGRESS表示一个任务已执行完计算操作的数据大小占整个数据块大小的百分比,由此可以估算出任务完成时间。计算公式为TETSTNTS/PROGRESS,其中TE表示预估的任务完成时间,TS表示任务开始执行的时间,TN为系统当前时间。0024优选地,在步骤53具体为,调用SDN控制器的API,来获取网络实时带宽信息,得到实施带宽存储起来。定义数据搬移时间。
26、为任务对应的数据从数据源节点搬移到数据计算节点上所消耗的时间,则该数据搬移时间可以通过公式TMDS/BW,其中TM表示数据搬移时间,DS表示数据块大小,该大小可以在配置文件中设定,BW表示实时带宽大小情况。0025优选地,在步骤54具体包括以下子步骤0026541在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下此时的节点空闲时间RIMINNOW;0027542在整个计算集群中找到最早可用的本地节点作为最优本地节点,记录下此时的节点空闲时间RIMINLOC;0028543比较步骤541和步骤542查询到的节点是否为同一节点,若是,定义最优本地节点为最优节点,进入步骤545,若否,进。
27、入步骤544;0029544比较若将任务分别分配给这两个计算节点,这两个计算节点上的任务完成时间哪个更早,即比较RIMINNOWTM与RIMINLOC的大小,小的即说明任务结束得更早,定义该节点为最优节点。0030545将待分配的任务分配给该最优节点。0031优选地,在步骤5中,在为计算节点分配远程任务的时候,还负责进行时隙预留说明书CN104102533A4/7页8划分。当某个远程任务需要进行数据搬移时,记录下待搬移的任务数据所搬移的源节点NDDATASRC和终节点NDMINNOW,将这些信息封装成一个流表FLOWTABLE,FLOWTABLE包头域记录了NDDATASRC和终节点NDMIN。
28、NOW的信息。该流表信息发送给SDN控制器,SDN控制器会将该流表下发到相应的SDN交换机中,当SDN交换机检查到该流表对于的流时,优先保证该数据的搬移操作;0032优选地,在步骤5中,若任务TKI被分配到在了节点NDJ上计算,而TKI的输入数据存放在TKI节点NDDATASRC上,则在执行任务时,输入数据需要从NDDATASRC搬移到NDJ上,定义TMI,J为该数据搬移时间;任务从开始计算到计算完毕之间的时间差为任务的计算时间,定义TPI,J为该任务的计算时间;从任务被分配到某个计算节点上开始,任务就会占用该计算节点的计算资源,任务实际占用计算资源的时间为从任务被分配的时间到任务计算完毕的时。
29、间之间的时间差,定义TEI,J为该任务的实际执行时间,其中,这几个时间满足公公式TEI,JTPI,JTMI,J。当计算数据位于处理计算任务的节点上的时候,定义该计算节点为本地节点,否则,定义该计算节点为远程节点。0033优选地,步骤55具体为,在该任务映射中,若计算出来的最优计算节点的键不存在,则以该计算出来的最优计算节点的名字为键新建一个键值对,再将该任务添加到值当中。若计算出来的最优计算节点的键存在,则查找到该键对应的键值对,将任务添加到值上的任务队列后面。0034按照本发明的另一方面,提供了一种基于带宽感知的HADOOP调度系统,包括0035第一模块,接收来自用户提交的作业,并且初始化该。
30、作业,为该作业建立一个作业ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程0036第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;0037第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的状态信息,从作业队列中提取出待调度的作业;0038第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入第六模块,否则进入第五模块;0039第五模块,对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度池中新建一个任务调度映射;004。
31、0第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块;0041第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入第三模块;0042第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结果进行归约计算,并且将归。
32、约计算的结果返回给用户。0043总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果说明书CN104102533A5/7页900441、可以提升作业执行响应速度本发明所述的调度方法从全局视角来为作业进行任务调度,摒弃了现有技术中,仅仅在计算节点发起任务分配请求时,才针对单一计算节点来执行任务调度与分配;本发明从全局角度上来保证任务的本地性,采取了一种作业的预分配机制,当某个作业第一次被调度的时候,为该作业的每一个任务分配针对该任务的最优计算节点,将任务的分配结果存储在作业分配池中,当该最优计算节点发起任务分配请求时,将预先分配给它的任务队列分配过去。当该作业中的每一个任。
33、务都在最优计算节点上执行完成时,整个作业的完成效果也是最优的。00452、可以适应复杂的网络环境本发明将网络带宽当成一个参数,来为调度器进行任务调度提供一个参考依据。在任务的分配中如果尽量保证任务都为本地任务的话,则可以避开网络链路中的数据传输,从而提高任务的执行速度、降低网络拥塞,这个性质称为任务的本地性。然而,当HADOOP计算集群中的计算节点上面的负载不均衡时,如果仍然盲目地保障数据的本地性,将该任务分给本地节点来执行的话,可能会导致任务都被分配到了高负载的本地节点,这样会产生一个作业等待。本发明综合考虑任务的本地性和网络带宽情况,灵活地在本地节点和非本地节点之中选取一个最优的节点,从而。
34、保证了在复杂的网络环境中,仍然可以保持一个较为高效率的任务调度。附图说明0046图1是本发明基于带宽感知的HADOOP调度方法的流程图。0047图2是本发明方法中步骤5的细化流程图。0048图3是本发明方法中步骤54的细化流程图。具体实施方式0049为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。0050本发明的整体思路在于,作为基于带宽感知的HADOOP调度算法,主要利用SDN软。
35、件定义网络的带宽感知特性优化HADOOP本身本地节点优先的算法。通过软件定义网络得到的链路带宽来计算数据迁移时间,并预估节点的空闲时间,最后分别计算出所有节点的任务完成时间。选择任务完成时间最早的节点作为任务执行的节点。0051如图1所示,本发明基于带宽感知的HADOOP调度方法包括以下步骤00521接收来自用户提交的HADOOP作业,并且初始化该HADOOP作业,并为该HADOOP作业建立一个作业ID对象,其中该作业ID对象用于封装任务和记录信息,以便跟踪该HADOOP作业的执行状态与进程00532将初始化后的HADOOP作业添加到作业队列中,其中该作业队列是用于维护待调度执行的HADOOP。
36、作业,并负责管理和调度内存映射中的所有HADOOP作业;00543接收计算节点发来的心跳包,提取出该心跳包中包含的该计算节点当前的状态信息,并从作业队列中提取出位于队首的HADOOP作业;具体而言,计算节点的状态信息包括该计算节点正在执行的任务数和计算节点的空余时间;说明书CN104102533A6/7页1000554在作业调度池作业调度池存放的是作业分配好的结果,有很多队列组成,每个队列存放一个作业的调度分配结果,即一个作业是被分配到哪个计算节点上执行。中查询是否已经存在提取的HADOOP作业,若存在,则转入步骤6,否则进入步骤5;00565对提取的HADOOP作业进行预分配计算操作,即通过。
37、调度算法将作业分为多个任务,并将每个任务分配给相应的计算节点,同时为该待调度的作业在作业调度池中新建一个任务调度映射;如图2所示,本步骤具体包括以下子步骤005751计算出整个HADOOP计算集群中每个计算节点的当前HADOOP任务情况,并根据当前HADOOP任务情况估算该计算节点当前HADOOP任务的剩余执行时间,以得到该计算节点的空闲时间;具体而言,首先监控与记录整个HADOOP计算集群中每一个计算节点的当前负载情况,并获取每一个计算节点当前运行的HADOOP任务的进度PROGRESS值,其中进度值是一个HADOOP任务的数据块中已被处理的数据大小占整个数据块大小的百分比,由此可以估算出当。
38、前HADOOP任务的剩余执行时间,具体计算公式为TETNTS1/进度值1,其中TE为当前HADOOP任务的剩余执行时间,TS为当前HADOOP任务开始执行的时间,TN为整个HADOOP计算集群的当前时间,则该计算节点的空闲时间为TETN;005852与命名节点NAMENODE进行通信,以获取提取的HADOOP作业中输入数据的数据副本备份情况,解析与转储该信息;005953与软件定义网络SOFTWAREDENEDNETWORK,简称SDN控制器进行通信,以获取整个HADOOP计算集群的实时带宽信息,并计算出数据搬移时间TM,即用数据块大小除以实时带宽。006054接收51步骤传入的集群节点空闲时。
39、间信息,接收52步骤数据传入的输入数据块副本信息,接收53步骤传入的网络带宽及数据搬移时间信息,综合三者进行计算处理,为每一个任务分配一个当前最优的计算节点。0061如图3所示,本步骤具体包括以下子步骤0062541在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下此时的节点空闲时间RIMINNOW;0063542在整个计算集群中找到最早可用的本地节点作为最优本地节点,记录下此时的节点空闲时间RIMINLOC;0064543比较步骤541和步骤542查询到的节点是否为同一节点,若是,定义最优本地节点为最优节点,进入步骤545,若否,进入步骤544;0065544比较若将任务分别分配。
40、给这两个计算节点,这两个计算节点上的任务完成时间哪个更早,即比较RIMINNOWTM与RIMINLOC的大小,小的即说明任务结束得更早,定义该节点为最优节点。0066545将待分配的任务分配给该最优节点。006755在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调度映射。在该任务映射中,若计算出来的最优计算节点的键不存在,则以该计算出来的最优计算节点的名字为键新建一个键值对,再将该任务添加到值当中。若计算出来的最优计算节点的键存在,则查找到该键对应的键值对,将任务添加到值上的任务队列后面。00686在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,。
41、若该映射不为空,则进入步骤7,否则,进入步骤8;说明书CN104102533A107/7页1100697从待调度的作业所对应的任务调度映射中,提取出步骤3中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入步骤3;00708若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。0071本发明基于带宽感知的HADOOP调度。
42、系统包括0072第一模块,接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程0073第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;0074第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的状态信息,从作业队列中提取出待调度的作业;0075第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入第六模块,否则进入第五模块;0076第五模块,对于该待调度的作业进行预分配计算操。
43、作,为该待调度的作业在作业调度池中新建一个任务调度映射;0077第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块;0078第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入第三模块;0079第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。0080本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。说明书CN104102533A111/3页12图1说明书附图CN104102533A122/3页13图2说明书附图CN104102533A133/3页14图3说明书附图CN104102533A14。