一种基于带宽感知的Hadoop调度方法和系统的制作方法

文档序号:6549934阅读:584来源:国知局
一种基于带宽感知的Hadoop调度方法和系统的制作方法
【专利摘要】本发明公开了一种基于带宽感知的Hadoop调度方法,包括:对Hadoop任务调度建立一个作业时间完成模型,为Hadoop调度系统建立一个数学模型,将Hadoop的任务调度问题转化为一个为待调度的作业寻找一个使得该作业的作业完成时间最短的任务调度方法的问题;利用SDN提供的实时网络管理与流量控制功能,提出了一种基于时隙的网络带宽分配机制,将每一条链路的剩余带宽的占用期划分为相等的时隙,在作业完成时间模型和网络时隙带宽分配机制的基础之上;在为某个任务分配计算节点之前,综合考虑任务的本地性与实施网络带宽情况,为每一个任务分配一个能够提供最早完成时间的计算节点。本发明解决了现有方法中不能同时从全局视角和实际网络可用带宽两方面进行任务调度的问题。
【专利说明】一种基于带宽感知的Hadoop调度方法和系统

【技术领域】
[0001] 本发明属于信息处理与数据计算领域,更具体地,涉及一种基于带宽感知的 Hadoop调度方法和系统。

【背景技术】
[0002] 随着科学技术的进步,互联网技术得到了高速的发展,这在推动了社会发展的同 时,也极大地丰富了人们的网络生活。而WEB2.0的到来,互联网更是发生了翻天覆地的变 化。WEB2.0的一个突出特点是用户原创内容(User generated content),大量的用户原创 内容使得数据出现了爆炸性的增长。在面向大规模数据处理技术的挑战面前,云计算作为 计算和处理大规模数据的一种新的模型被提了出来。得益于分布式和虚拟化等多项技术的 联合演进,云计算作为一种新型大数据处理模型产生了。云计算采取集群计算的概念,将计 算任务分布给大规模计算机集群组成的计算能力池中,使得数据处理需求和应用系统能够 根据自己的实际需求来动态的获取计算能力及存储资源等。
[0003] 到目前为止,全世界范围内大部分的云计算系统采取的都是基于MapReduce计算 模型和分布式文件存储系统,这主要模仿实现了 Google的云计算核心技术。Google的云 计算核心主要包括以下三个部分:分布式结构化数据存储系统BigTable、GFS(Google File System)以及分布式计算模型MapReduce。然而Google作为一家商业公司,是不可能公开 其技术细节的。对于想要继续研究和发展云计算的个人或者科研团体来说,无法获得更多 的了解。开源的云计算系统Hadoop则弥补了这一缺陷,在2005年,Apache基金会将一个 开源项目Nutch的一部分单独推出来,并给与资金资助。Hadoop的设计理念是Google的云 计算核心技术,它是一个开源框架,该框架支持海量数据处理应用程序的操作。Hadoop的核 心包括了分布式文件系统HDFS和并行编程框架MapReduce,HDFS在集群中实现了 GFS,并 且支持在集群中对文件的读写和传输等操作;MapReduce则在集群中完成了分布式计算功 能,它利用HDFS提供的文件处理能力,实现了任务的初始化、调度、运行等功能。
[0004] Hadoop的搭建不需要超级计算机,可以将其部署在由大量廉价的硬件设备组成的 计算机集群中。Hadoop平台封装了其繁复的底层实现细节,仅仅为其上运行的应用程序提 供稳定的API接口,这个实现方式屏蔽了底层对数据的并行处理的细节,如输入数据的分 割和备份、集群的调度、容错和监控等。Hadoop的开发人员在开发的过程中,可以不必关注 太多底层架构细节,而把精力集中在程序的核心部分上面,像开发普通程序一样来开发云 计算应用程序。这种方式大大地降低了应用程序的开发压力,显著提升了开发的效率。同时 为了增强整个Hadoop框架的易用性,Hadoop开源库在应用层提供了丰富完整的容错能力, 整个集群中的每一个节点都可以独立地对作业运行可能出现的失败情况进行处理。Hadoop 开发框架以其稳定、廉价以及高效地特点深受研究者和开发者的欢迎,被广泛应用在搜索 引擎、商业数据挖掘、广告营销效果分析、生物信息分析、网站日志分析与存储等应用领域。 [0005] 虽然作为目前得到最广泛应用的开源云计算平台,但毕竟从Apache基金会推出 Hadoop平台到目前为止不过短短数年,即使得到了学术界和工业界的共同重视,在很多地 方,Hadoop平台仍存在着完善的必要性和可能性。在这其中,最重要的问题是任务调度问 题。作为Hadoop系统中的一个至关重要的关键技术,任务调度负责对计算资源和作业运行 进行调度,调度结果会直接影响Hadoop系统的计算性能和Hadoop系统的计算资源利用效 率。然而目前业界对作业调度技术的研究尚处于基础阶段,在日益复杂的网络环境和多种 多样的应用场景的面前,现有的各种作业调度算法仍然存在着Hadoop系统的作业响应时 间过慢、Hadoop平台的执行能力和交互能力差、以及Hadoop系统资源的利用率低的技术问 题。


【发明内容】

[0006] 针对现有技术的以上缺陷或改进需求,本发明提供了一种基于带宽感知的Hadoop 调度方法和系统,其目的在于,解决现有Hadoop调度算法中的作业响应时间过慢、Hadoop 平台整体性能过低的技术问题。
[0007] 为实现上述目的,按照本发明的一个方面,提供了一种基于带宽感知的Hadoop调 度方法,包括以下步骤:
[0008] (1)接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对 象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程:
[0009] (2)将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执 行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;
[0010] (3)接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的 状态信息,从作业队列中提取出待调度的作业;
[0011] (4)在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入 步骤(6),否则进入步骤(5);
[0012] (5)对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度池 中新建一个任务调度映射;
[0013] (6)在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任 务调度映射,若该映射不为空,则进入步骤(7),否则,进入步骤(8);
[0014] (7)从待调度的作业所对应的任务调度映射中,提取出步骤(3)中所示的计算节 点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进 心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在 该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列, 进入步骤(3);
[0015] (8)若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有 任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
[0016] 优选地,在步骤(3)中,在作业分配池中,对于每一个待调度的作业都维护了一个 任务调度映射,该映射的键是计算节点的名字,该映射的值是预先分配给该计算节点的计 算任务队列。每当有一个计算节点发起了分配任务的请求之后,从作业管理队列中抽取出 一个带调度的作业,查询该作业维护的任务调度映射。在该任务调度映射中以发起分配任 务请求的任务节点的名字为键,提取出该键对应的值,即是预先分配给该计算节点的计算 任务队列。依据该计算节点的计算能力,将该任务队列的整体或者部分封装进给发起分配 任务的请求的计算节点的返回信息中,返回给该计算节点来执行,同时在作业调度池中更 新该任务队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除 掉整个任务队列。
[0017] 优选地,步骤(5)具体包括以下子步骤:
[0018] (5-1)计算出整个Hadoop计算集群中各个节点的当前负载情况,然后再估算出当 前负载的剩余执行时间,从而得到各个节点的空闲时间;
[0019] (5-2)与命名节点进行通信,获取当前待调度作业的输入数据的数据副本备份情 况,解析与转储该信息;
[0020] (5-3)与SDN控制器进行通信,来获取网络实时带宽信息,计算出数据搬移时间。 调用SDN控制器Ν0Χ的API,来获取网络实时带宽信息,得到实施带宽存储起来。定义数据 搬移时间为任务对应的数据从数据源节点搬移到数据计算节点上所消耗的时间,则该数据 搬移时间可以通过公式:T M = DS/BW,其中TM表示数据搬移时间,DS表示数据块大小,该大 小可以在配置文件中设定,BW表示实时带宽大小情况。
[0021] (5-4)接收(5-1)步骤传入的集群节点空闲时间信息,接收(5-2)步骤数据传入的 输入数据块副本信息,接收(5-3)步骤传入的网络带宽及数据搬移时间信息,综合三者进 行计算处理,为每一个任务分配一个当前最优的计算节点。
[0022] (5-5)在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调 度映射。
[0023] 优选地,在步骤(5-1)具体为,监控与记录整个计算集群中每一个计算节点的当 前运行计算情况,获取每一个计算节点当前运行的progress值。Progress表示一个任务已 执行完计算操作的数据大小占整个数据块大小的百分比,由此可以估算出任务完成时间。 计算公式为T E = TS+(TN-TS)/progress,其中TE表示预估的任务完成时间,T s表示任务开始 执行的时间,TN为系统当前时间。
[0024] 优选地,在步骤(5-3)具体为,调用SDN控制器的API,来获取网络实时带宽信息, 得到实施带宽存储起来。定义数据搬移时间为任务对应的数据从数据源节点搬移到数据计 算节点上所消耗的时间,则该数据搬移时间可以通过公式:T M = DS/BW,其中TM表示数据搬 移时间,DS表示数据块大小,该大小可以在配置文件中设定,BW表示实时带宽大小情况。
[0025] 优选地,在步骤(5-4)具体包括以下子步骤:
[0026] (5-4-1)在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下 此时的节点空闲时间rl mi_w ;
[0027] (5-4-2)在整个计算集群中找到最早可用的本地节点作为最优本地节点,记录下 此时的节点空闲时间rl minl。。;
[0028] (5-4-3)比较步骤(5-4-1)和步骤(5-4-2)查询到的节点是否为同一节点,若是, 定义最优本地节点为最优节点,进入步骤(5-4-5),若否,进入步骤(5-4-4);
[0029] (5-4-4)比较若将任务分别分配给这两个计算节点,这两个计算节点上的任务完 成时间哪个更早,即比较rI mi_w+TM与rlminl。。的大小,小的即说明任务结束得更早,定义该 节点为最优节点。
[0030] (5-4-5)将待分配的任务分配给该最优节点。
[0031] 优选地,在步骤(5)中,在为计算节点分配远程任务的时候,还负责进行时隙预留 划分。当某个远程任务需要进行数据搬移时,记录下待搬移的任务数据所搬移的源节点 NDdataSrc和终节点NDmMOT,将这些信息封装成一个流表Fl〇WTabl e,Fl〇WTable包头域记录了 NDdataSrc和终节点NDmi_w的信息。该流表信息发送给SDN控制器,SDN控制器会将该流表下 发到相应的SDN交换机中,当SDN交换机检查到该流表对于的流时,优先保证该数据的搬移 操作;
[0032] 优选地,在步骤(5)中,若任务被分配到在了节点NDj上计算,而的输入数 据存放在节点ND dataS,。上,则在执行任务时,输入数据需要从NDdataS,。搬移到ND」上,定 义TMu为该数据搬移时间;任务从开始计算到计算完毕之间的时间差为任务的计算时间, 定义TPu为该任务的计算时间;从任务被分配到某个计算节点上开始,任务就会占用该计 算节点的计算资源,任务实际占用计算资源的时间为从任务被分配的时间到任务计算完毕 的时间之间的时间差,定义TEu为该任务的实际执行时间,其中,这几个时间满足公公式 TEi;j = TPu+TMu。当计算数据位于处理计算任务的节点上的时候,定义该计算节点为本地 节点,否则,定义该计算节点为远程节点。
[0033] 优选地,步骤(5-5)具体为,在该任务映射中,若计算出来的最优计算节点的键不 存在,则以该计算出来的最优计算节点的名字为键新建一个键值对,再将该任务添加到值 当中。若计算出来的最优计算节点的键存在,则查找到该键对应的键值对,将任务添加到值 上的任务队列后面。
[0034] 按照本发明的另一方面,提供了一种基于带宽感知的Hadoop调度系统,包括:
[0035] 第一模块,接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业 ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程:
[0036] 第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待 调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;
[0037] 第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前 所处的状态信息,从作业队列中提取出待调度的作业;
[0038] 第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然 后转入第六模块,否则进入第五模块;
[0039] 第五模块,对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业 调度池中新建一个任务调度映射;
[0040] 第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对 应的任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块;
[0041] 第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的 计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分 封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务 队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任 务队列,进入第三模块;
[0042] 第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到 的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
[0043] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有 益效果:
[0044] 1、可以提升作业执行响应速度:本发明所述的调度方法从全局视角来为作业进行 任务调度,摒弃了现有技术中,仅仅在计算节点发起任务分配请求时,才针对单一计算节点 来执行任务调度与分配;本发明从全局角度上来保证任务的本地性,采取了一种作业的预 分配机制,当某个作业第一次被调度的时候,为该作业的每一个任务分配针对该任务的最 优计算节点,将任务的分配结果存储在作业分配池中,当该最优计算节点发起任务分配请 求时,将预先分配给它的任务队列分配过去。当该作业中的每一个任务都在最优计算节点 上执行完成时,整个作业的完成效果也是最优的。
[0045] 2、可以适应复杂的网络环境:本发明将网络带宽当成一个参数,来为调度器进行 任务调度提供一个参考依据。在任务的分配中如果尽量保证任务都为本地任务的话,则可 以避开网络链路中的数据传输,从而提高任务的执行速度、降低网络拥塞,这个性质称为任 务的本地性。然而,当Hadoop计算集群中的计算节点上面的负载不均衡时,如果仍然盲目 地保障数据的本地性,将该任务分给本地节点来执行的话,可能会导致任务都被分配到了 高负载的本地节点,这样会产生一个作业等待。本发明综合考虑任务的本地性和网络带宽 情况,灵活地在本地节点和非本地节点之中选取一个最优的节点,从而保证了在复杂的网 络环境中,仍然可以保持一个较为高效率的任务调度。

【专利附图】

【附图说明】
[0046] 图1是本发明基于带宽感知的Hadoop调度方法的流程图。
[0047] 图2是本发明方法中步骤(5)的细化流程图。
[0048] 图3是本发明方法中步骤(5-4)的细化流程图。

【具体实施方式】
[0049] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要 彼此之间未构成冲突就可以相互组合。
[0050] 本发明的整体思路在于,作为基于带宽感知的Hadoop调度算法,主要利用SDN(软 件定义网络)的带宽感知特性优化Hadoop本身本地节点优先的算法。通过软件定义网络 得到的链路带宽来计算数据迁移时间,并预估节点的空闲时间,最后分别计算出所有节点 的任务完成时间。选择任务完成时间最早的节点作为任务执行的节点。
[0051] 如图1所示,本发明基于带宽感知的Hadoop调度方法包括以下步骤:
[0052] (1)接收来自用户提交的Hadoop作业,并且初始化该Hadoop作业,并为该Hadoop 作业建立一个作业ID对象,其中该作业ID对象用于封装任务和记录信息,以便跟踪该 Hadoop作业的执行状态与进程:
[0053] (2)将初始化后的Hadoop作业添加到作业队列中,其中该作业队列是用于维护待 调度执行的Hadoop作业,并负责管理和调度内存映射中的所有Hadoop作业;
[0054] (3)接收计算节点发来的心跳包,提取出该心跳包中包含的该计算节点当前的状 态信息,并从作业队列中提取出位于队首的Hadoop作业;具体而言,计算节点的状态信息 包括该计算节点正在执行的任务数和计算节点的空余时间;
[0055] (4)在作业调度池(作业调度池存放的是作业分配好的结果,有很多队列组成,每 个队列存放一个作业的调度分配结果,即一个作业是被分配到哪个计算节点上执行。)中查 询是否已经存在提取的Hadoop作业,若存在,则转入步骤(6),否则进入步骤(5);
[0056] (5)对提取的Hadoop作业进行预分配计算操作,即通过调度算法将作业分为多个 任务,并将每个任务分配给相应的计算节点,同时为该待调度的作业在作业调度池中新建 一个任务调度映射;如图2所示,本步骤具体包括以下子步骤:
[0057] (5-1)计算出整个Hadoop计算集群中每个计算节点的当前Hadoop任务情况,并 根据当前Hadoop任务情况估算该计算节点当前Hadoop任务的剩余执行时间,以得到该计 算节点的空闲时间;具体而言,首先监控与记录整个Hadoop计算集群中每一个计算节点的 当前负载情况,并获取每一个计算节点当前运行的Hadoop任务的进度(Progress)值,其中 进度值是一个Hadoop任务的数据块中已被处理的数据大小占整个数据块大小的百分比, 由此可以估算出当前Hadoop任务的剩余执行时间,具体计算公式为T E = (TN-TS)*(1/进度 值-1),其中TE为当前Hadoop任务的剩余执行时间,T s为当前Hadoop任务开始执行的时 间,TN为整个Hadoop计算集群的当前时间,则该计算节点的空闲时间为T E+TN ;
[0058] (5-2)与命名节点(Name node)进行通信,以获取提取的Hadoop作业中输入数据 的数据副本备份情况,解析与转储该信息;
[0059] (5-3)与软件定义网络(Software defined network,简称SDN)控制器进行通信, 以获取整个Hadoop计算集群的实时带宽信息,并计算出数据搬移时间TM,即用数据块大小 除以实时带宽。
[0060] (5-4)接收(5-1)步骤传入的集群节点空闲时间信息,接收(5-2)步骤数据传入的 输入数据块副本信息,接收(5-3)步骤传入的网络带宽及数据搬移时间信息,综合三者进 行计算处理,为每一个任务分配一个当前最优的计算节点。
[0061] 如图3所示,本步骤具体包括以下子步骤:
[0062] (5-4-1)在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下 此时的节点空闲时间rl mi_w ;
[0063] (5-4-2)在整个计算集群中找到最早可用的本地节点作为最优本地节点,记录下 此时的节点空闲时间rl minl。。;
[0064] (5-4-3)比较步骤(5-4-1)和步骤(5-4-2)查询到的节点是否为同一节点,若是, 定义最优本地节点为最优节点,进入步骤(5-4-5),若否,进入步骤(5-4-4);
[0065] (5-4-4)比较若将任务分别分配给这两个计算节点,这两个计算节点上的任务完 成时间哪个更早,即比较rImi_w+TM与rlminl。。的大小,小的即说明任务结束得更早,定义该 节点为最优节点。
[0066] (5-4-5)将待分配的任务分配给该最优节点。
[0067] (5-5)在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调 度映射。在该任务映射中,若计算出来的最优计算节点的键不存在,则以该计算出来的最优 计算节点的名字为键新建一个键值对,再将该任务添加到值当中。若计算出来的最优计算 节点的键存在,则查找到该键对应的键值对,将任务添加到值上的任务队列后面。
[0068] (6)在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任 务调度映射,若该映射不为空,则进入步骤(7),否则,进入步骤(8);
[0069] (7)从待调度的作业所对应的任务调度映射中,提取出步骤(3)中所示的计算节 点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进 心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在 该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列, 进入步骤(3);
[0070] (8)若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有 任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
[0071] 本发明基于带宽感知的Hadoop调度系统包括:
[0072] 第一模块,接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业 ID对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程:
[0073] 第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待 调度执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象;
[0074] 第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前 所处的状态信息,从作业队列中提取出待调度的作业;
[0075] 第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然 后转入第六模块,否则进入第五模块;
[0076] 第五模块,对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业 调度池中新建一个任务调度映射;
[0077] 第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对 应的任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块;
[0078] 第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的 计算节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分 封装进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务 队列,在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任 务队列,进入第三模块;
[0079] 第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到 的所有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
[0080] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以 限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含 在本发明的保护范围之内。
【权利要求】
1. 一种基于带宽感知的Hadoop调度方法,其特征在于,包括以下步骤: (1) 接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID对象,该 作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程: (2) 将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度执行的 作业的队列,该队列负责管理和调度内存映射中的所有作业对象; (3) 接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处的状态 信息,从作业队列中提取出待调度的作业; (4) 在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转入步骤 (6),否则进入步骤(5); (5) 对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度池中新 建一个任务调度映射; (6) 在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的任务调 度映射,若该映射不为空,则进入步骤(7),否则,进入步骤(8); (7) 从待调度的作业所对应的任务调度映射中,提取出步骤(3)中所示的计算节点所 对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装进心跳 包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列,在该任 务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队列,进入 步骤(3); (8) 若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所有任 务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
2. 根据权利要求1所述的Hadoop调度方法,其特征在于,在作业分配池中,对于每一 个待调度的作业都维护了一个任务调度映射,该映射的键是计算节点的名字,该映射的值 是预先分配给该计算节点的计算任务队列,每当有一个计算节点发起了分配任务的请求之 后,从作业管理队列中抽取出一个带调度的作业,查询该作业维护的任务调度映射,在该任 务调度映射中以发起分配任务请求的任务节点的名字为键,提取出该键对应的值,即是预 先分配给该计算节点的计算任务队列,依据该计算节点的计算能力,将该任务队列的整体 或者部分封装进给发起分配任务的请求的计算节点的返回信息中,返回给该计算节点来执 行,同时在作业调度池中更新该任务队列,在该任务队列中删除掉已经分配给计算节点的 任务,若全部分配完毕,删除掉整个任务队列。
3. 根据权利要求1或2所述的Hadoop调度方法,其特征在于,步骤(5)具体包括以下 子步骤: (5-1)计算出整个Hadoop计算集群中各个节点的当前负载情况,然后再估算出当前负 载的剩余执行时间,从而得到各个节点的空闲时间; (5-2)与命名节点进行通信,获取当前待调度作业的输入数据的数据副本备份情况,解 析与转储该信息; (5-3)与SDN控制器进行通信,来获取网络实时带宽信息,计算出数据搬移时间, (5-4)接收(5-1)步骤传入的集群节点空闲时间信息,接收(5-2)步骤数据传入的输入 数据块副本信息,接收(5-3)步骤传入的网络带宽及数据搬移时间信息,综合三者进行计 算处理,为每一个任务分配一个当前最优的计算节点, (5-5)在作业调度池中,为该待调度的作业新建一个任务调度映射,更新该任务调度 映射。
4. 根据权利要求3所述的Hadoop调度方法,其特征在于,步骤(5-1)具体为,监控与 记录整个计算集群中每一个计算节点的当前运行计算情况,获取每一个计算节点当前运行 的progress值,progress表示一个任务已执行完计算操作的数据大小占整个数据块大小 的百分比,由此可以估算出任务完成时间,计算公式为T E = Ts+(TN-Ts)/progress,其中1^表 示预估的任务完成时间,T s表示任务开始执行的时间,TN为系统当前时间。
5. 根据权利要求3所述的Hadoop调度方法,其特征在于,步骤(5-3)具体为,调用SDN 控制器的API,来获取网络实时带宽信息,得到实施带宽存储起来,定义数据搬移时间为任 务对应的数据从数据源节点搬移到数据计算节点上所消耗的时间,则该数据搬移时间可以 通过公式:T M = DS/BW,其中TM表示数据搬移时间,DS表示数据块大小,该大小可以在配置 文件中设定,BW表示实时带宽大小情况。
6. 根据权利要求3所述的Hadoop调度方法,其特征在于,步骤(5-4)具体包括以下子 步骤: (5-4-1)在整个计算集群中找到最早可用的远程节点作为最优远程节点,记录下此时 的节点空闲时间rlmi_w ; (5-4-2)在整个计算集群中找到最早可用的本地节点作为最优本地节点,记录下此时 的节点空闲时间rlminl。。; (5-4-3)比较步骤(5-4-1)和步骤(5-4-2)查询到的节点是否为同一节点,若是,定义 最优本地节点为最优节点,进入步骤(5-4-5),若否,进入步骤(5-4-4); (5-4-4)比较若将任务分别分配给这两个计算节点,这两个计算节点上的任务完成时 间哪个更早,即比较rImi_w+TM与rlminl。。的大小,小的即说明任务结束得更早,定义该节点 为最优节点, (5-4-5)将待分配的任务分配给该最优节点。
7. 根据权利要求6所述的Hadoop调度方法,其特征在于,在为计算节点分配远程 任务的时候,还负责进行时隙预留划分,当某个远程任务需要进行数据搬移时,记录下待 搬移的任务数据所搬移的源节点ND dataSrc和终节点NDmMOT,将这些信息封装成一个流表 FlowTable,FlowTable包头域记录了 NDdataSrc和终节点NDmMOT的信息,该流表信息发送给 SDN控制器,SDN控制器会将该流表下发到相应的SDN交换机中,当SDN交换机检查到该流 表对于的流时,优先保证该数据的搬移操作。
8. 根据权利要求8所述的Hadoop调度方法,其特征在于,若任务被分配到在了节 点冊」上计算,而的输入数据存放在节点NDdataS,。上,则在执行任务时,输入数据需 要从ND dataSM搬移到NDj上,定义TMt」为该数据搬移时间;任务从开始计算到计算完毕之间 的时间差为任务的计算时间,定义TPu为该任务的计算时间;从任务被分配到某个计算节 点上开始,任务就会占用该计算节点的计算资源,任务实际占用计算资源的时间为从任务 被分配的时间到任务计算完毕的时间之间的时间差,定义TEu为该任务的实际执行时间, 其中,这几个时间满足公公式TE i;j = TPu+TMu,当计算数据位于处理计算任务的节点上的 时候,定义该计算节点为本地节点,否则,定义该计算节点为远程节点。
9. 根据权利要求3所述的Hadoop调度方法,其特征在于,步骤(5-5)具体为,在该任务 映射中,若计算出来的最优计算节点的键不存在,则以该计算出来的最优计算节点的名字 为键新建一个键值对,再将该任务添加到值当中,若计算出来的最优计算节点的键存在,则 查找到该键对应的键值对,将任务添加到值上的任务队列后面。
10. -种基于带宽感知的Hadoop调度系统,其特征在于,包括以下模块: 第一模块,接收来自用户提交的作业,并且初始化该作业,为该作业建立一个作业ID 对象,该作业ID对象负责封装任务和记录信息,以便跟踪作业执行状态与进程: 第二模块,将初始化完成的作业添加到作业队列中,该作业队列是一个维护了待调度 执行的作业的队列,该队列负责管理和调度内存映射中的所有作业对象; 第三模块,接收计算节点发来的心跳包,提取出该心跳包中包含的计算节点当前所处 的状态信息,从作业队列中提取出待调度的作业; 第四模块,在作业调度池中查询该池中是否已经存在该待调度的作业,若存在,然后转 入第六模块,否则进入第五模块; 第五模块,对于该待调度的作业进行预分配计算操作,为该待调度的作业在作业调度 池中新建一个任务调度映射; 第六模块,在作业调度池中查询到该待调度的作业,提取出该待调度的作业所对应的 任务调度映射,若该映射不为空,则进入第七模块,否则,进入第八模块; 第七模块,从待调度的作业所对应的任务调度映射中,提取出第三模块中所示的计算 节点所对应的任务队列,依据该计算节点的计算能力,将该任务队列的整体或者部分封装 进心跳包的返回信息中,返回给该计算节点来执行,同时在作业调度池中更新该任务队列, 在该任务队列中删除掉已经分配给计算节点的任务,若全部分配完毕,删除掉整个任务队 列,进入第三模块; 第八模块,若任务调度映射为空,说明该作业的所有任务均已经执行完毕,将得到的所 有任务的执行结果进行归约计算,并且将归约计算的结果返回给用户。
【文档编号】G06F9/46GK104102533SQ201410270693
【公开日】2014年10月15日 申请日期:2014年6月17日 优先权日:2014年6月17日
【发明者】戴彬, 秦鹏, 邵翔, 邹云飞 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1