一种支持作业依赖关系的定时作业调度方法及系统与流程

文档序号:14443800阅读:430来源:国知局
一种支持作业依赖关系的定时作业调度方法及系统与流程

本发明涉及计算机技术领域,更具体地,涉及一种支持作业依赖关系的定时作业调度方法及系统。



背景技术:

近年来,随着互联网、大数据存储、分布式计算的快速发展,计算规模的日益扩大成了很多互联网行业的严峻挑战和宝贵机遇,大数据的涌现更是深深改变了人们的生活和工作方式。利用合理高效的计算模式,摆脱网络中各种计算资源在地域和结构的限制,充分利用计算资源,是互联网企业实际而又迫切的需求。于是,调度器的设计和开发成为国内外大型互联网公司研究实践的热点技术。

现有的离线计算技术主要解决的是定时调度、分布式调度等问题。在实际应用场景中,作业之间往往存在依赖关系,即一个作业的输入需要依赖其他作业的输出,同时作业也需要在指定时间指定机器运行。

因此,需要一种高效、可靠的调度方法,同时实现作业依赖关系调度和作业定时调度。



技术实现要素:

本发明提出了一种能够支持作业依赖关系的定时作业调度方法,解决了作业之间存在依赖关系的问题,也解决了作业在指定时间进行调度执行的问题。该方法可靠性好、效率高、系统实现简单。

为实现以上发明目的,采用的技术方案是:

一种支持作业依赖关系的定时作业调度方法,包括以下步骤:

s1.调度器从存储单元中加载作业相关数据,包括作业信息列表和作业依赖关系;

s2.调度器根据作业依赖关系将作业信息列表转化为作业有向无环图;

s3.调度器将作业有向无环图作为副本生成任务有向无环图;

s4.调度器对任务有向无环图中节点入度为非0的任务进行依赖调度;

s5.调度器根据任务触发时间对任务有向无环图中节点入度为0的任务进行定时调度;

s6.执行单元执行上述任务后,向调度器反馈相关的执行结果。

优选地,所述步骤s2转化为作业有向无环图的具体过程如下:

s11.根据作业依赖关系,将作业列表转化为作业图结构,其中作业图结构中的每个节点代表了对应的作业信息;

s12.判断作业图结构是否存在环,如果存在,则继续执行步骤s13,否则转移到步骤s14;

s13:获取作业图结构中环所在的子连通图,移除该子连通图,使作业图结构是合法的,同时报警提示作业依赖关系异常;

s14:获取合法的作业有向无环图。

优选地,所述步骤s11将作业列表转化为作业图结构的具体过程如下:

s111.构建空的哈希映射数据结构,其中映射的键表示一个作业,映射的值表示依赖作业的集合;

s112.遍历所有的作业,将其添加到哈希映射数据结构中;

s113.遍历所有的作业依赖关系,对任一依赖关系(x:y),表示作业y在作业x之后调度,将作业y添加到作业x对应的依赖作业集合中,此时哈希映射数据结构表示为作业图结构。

优选地,所述步骤s12中,对作业图结构进行拓扑排序,将排序后的节点数与作业图结构的节点数进行比较来判断作业图结构是否有环,如果排序后的节点数等于作业图结构的节点数,则图结构无环,如果排序后的节点数小于作业图结构的节点数,则图结构有环。

优选地,所述步骤s13获取作业图结构中环所在的子连通图的具体过程如下:

s131.根据作业图结构的拓扑排序获取所有环及其连通的节点;

s132.将环及其连通的节点添加到集合中;

s133.遍历集合中的所有节点,将连通该节点的所有节点添加到集合中,同时也要遍历添加到集合中的新节点,将连通新节点的所有节点添加到集合中;

s134.遍历完所有节点后,获得环所在的子连通图,即集合中所有节点;

s135.移除作业图结构中包含在集合内的所有节点,至此,得到去环后的有向无环图。

优选地,所述步骤s2将作业有向无环图作为副本生成任务有向无环图的具体过程如下:

s21.对于任一个作业组,获取作业有向无环图中该作业组的第一个执行的作业,在当前系统时间基础上,通过作业的触发时间配置计算得到该作业的执行时间;

s22.遍历作业有向无环图的其他节点,在第一个执行作业的执行时间基础上,通过该作业的触发时间配置计算得到该作业的执行时间;

s23.按照作业有向无环图的数据结构以及对应作业的执行时间克隆出任务有向无环图。

优选地,所述步骤s5进行定时调度的具体过程如下:

s51.获取任务有向无环图中节点入度为0的任务;

s52.按照任务的触发时间对任务进行排序;

s53.比较当前系统时间和任务的触发时间,筛选出当前需要调度执行的任务;

s54.将满足触发时间的任务分配给执行单元,由执行单元来执行任务程序;

s55.调度器分配完任务之后,进入休眠状态,等待下次定时调度。

优选地,所述步骤s6中,执行单元执行完任务后,会向调度器反馈执行结果,调度器根据任务执行结果动态调整依赖调度过程,具体步骤如下:

s61.调度器获取任务执行结果,包括任务基本信息和状态码;

s62.根据任务状态码判断任务是否执行成功,如果执行成功,则转移至步骤s63,如果执行失败,则转移至步骤s64;

s63.将执行成功的任务从任务有向无环图中移除,使得依赖该任务的子任务获得调度的机会,过程结束;

s64.将执行失败的任务所在的任务组从任务有向无环图中移除,报警提示该任务及其任务组执行失败,过程结束。

同时,本发明还提供了一种应用以上方法的系统,其包括存储单元、调度器和执行单元。

与现有技术相比,本发明的有益效果是:

本发明提供的方法将调度过程划分为依赖调度和定时调度,在解决了复杂的应用场景的同时,降低了系统复杂性,使得本发明在技术实现上变得简单。本发明的系统结构清晰,有利于系统维护和功能扩展。

附图说明

图1是本发明的模块示意图。

图2是调度器初始化的流程示意图。

图3举例说明了系统待调度的作业信息列表以及作业的依赖关系。

图4是对图3所示的作业列表进行依赖调度的具体流程图。

图5是调度器定时调度的流程示意图。

图6是任务执行结果反馈的流程示意图。

具体实施方式

附图仅用于示例性说明,不能理解为对本专利的限制;

以下结合附图和实施例对本发明做进一步的阐述。

实施例1

图1描述了本发明的功能模块,包括存储单元、调度器和执行单元。存储单元,用于向持久层读写数据,为调度器提供了读取作业相关信息的接口;调度器,对任务进行依赖调度和定时调度,从存储单元获取作业信息,向执行单元分配任务;执行单元,是执行任务的工作节点,接收调度器分配的任务并执行,并向调度器反馈任务执行结果。

本实施例提供的方法的具体流程如下:

s1.调度器从存储单元中加载作业相关数据,包括作业信息列表和作业依赖关系;

s2.调度器根据作业依赖关系将作业信息列表转化为作业有向无环图;

s3.调度器将作业有向无环图作为副本生成任务有向无环图;

s4.调度器对任务有向无环图中节点入度为非0的任务进行依赖调度;

s5.调度器根据任务触发时间对任务有向无环图中节点入度为0的任务进行定时调度;

s6.执行单元执行上述任务后,向调度器反馈相关的执行结果。

在作业有向无环图中,每个节点的入度表示依赖且未执行的作业的数量,其出度表示被依赖的作业的数量。

实施例2

图2描述了调度器的初始化过程,具体流程如下:

s11:调度器从存储单元中加载作业相关数据,包括作业信息列表和作业依赖关系;

s12:根据作业依赖关系,将作业列表转化为作业图结构,其中作业图结构的每个节点代表了对应的作业信息;

s13:判断作业图结构是否存在环,如果存在,则继续执行步骤s14,否则转移到步骤s15;

s14:获取作业图结构中环所在子连通图,移除该子连通图,使作业图结构是合法的,同时系统报警提示作业依赖关系异常;

s15:获取合法的作业有向无环图;

s16:将作业有向无环图作为副本生成任务有向无环图,其中每个任务是对应作业的具体实例,是被调度处理的对象。

进一步,作业依赖关系是多对多的映射关系,合法的作业依赖关系是没有环形依赖的,即作业图结构是一个有向无环图,其数据模型可以通过关系型数据模型的两个字段来表示。步骤s12中根据作业依赖关系生成作业图结构,具体步骤如下:

s121:构建空的哈希映射数据结构,其中映射的键表示一个作业,映射的值表示依赖作业的集合;

s122:遍历所有的作业,将其添加到哈希映射数据结构中。例如当有a、b、c、d四个作业时,生成的哈希映射数据结构为(a:[];b:[];c:[];d:[])。

s123:遍历所有的作业依赖关系,对任一依赖关系(x:y),表示作业y在作业x之后调度,将作业y添加到作业x对应的依赖作业集合中。例如当依赖关系为(a:b)、(a:c)、(b:d)、(c:d)时,生成的哈希映射数据结构为(a:[b,c];b:[d];c:[d];d:[])。至此,哈希映射数据结构即表示为作业图结构。

进一步,步骤s13中判断作业图结构是否有环,可以对图进行拓扑排序,根据排序后的节点数与作业图结构的节点数大小比较来判断作业图结构是否有环。如果排序后的节点数等于作业图结构的节点数,则作业图结构无环,如果排序后的节点数小于作业图结构的节点数,则作业图结构有环。

进一步,步骤s14中移除环所在的子连通图时,首先要获得作业图结构中包含环的子连通图,然后从作业图结构中移除包含环的子连通图,具体步骤如下:

s141:通过作业图结构的拓扑排序获取所有环及其连通的节点;

s142:将环及其连通的节点添加到集合中;

s143:遍历集合中的所有节点,将连通该节点的所有节点添加到集合中,同时也要遍历添加到集合中的新节点,将连通新节点的所有节点添加到集合中;

s144:遍历完所有节点后,获得环所在的子连通图,即集合中所有节点;

s145:移除作业图结构中包含在集合内的所有节点,至此,得到去环后的有向无环图。

进一步,步骤s16中将作业有向无环图作为副本生成任务有向无环图的具体步骤如下:

s161:对对于任一个作业组,获取作业有向无环图中该作业组的第一个执行的作业,在当前系统时间基础上,通过作业的触发时间配置计算得到该作业的执行时间;

s162:遍历作业有向无环图中的其他节点,在第一个执行作业的执行时间基础上,通过该作业的触发时间配置计算得到该作业的执行时间;

s163:按照作业有向无环图的数据结构以及对应作业的执行时间克隆出任务有向无环图。

进一步,作业的触发时间配置可以是crontab表达式、定时配置、日期配置等。

图3举例说明了系统待调度的作业信息列表和作业之间的依赖关系,图示例子中,共有四个作业,分别是a、b、c、d,其触发时间配置采用crontab表达式。作业a在每天的1:00执行,作业b在每天的2:00执行,作业c在每天的3:00执行,作业d在每天的4:00执行。作业d依赖作业b和作业c,作业b依赖作业a,作业c依赖作业a。

图4是对图3所示的作业列表进行依赖调度的流程示意图,具体流程如下:

s21:调度器在初始化时生成任务有向无环图,进入状态a,此时依赖调度的输出(入度为0的任务)只有a1;

s22:在1:00时,任务a1被调度,当任务组的第一个任务被调度时,将作业有向无环图作为副本生成新的任务组,其中任务a2会在第二天的1:00执行,进入状态b,此时依赖调度的输出有a1、a2;

s23:当任务a1执行成功并反馈给调度器时,调度器将任务a1从任务有向无环图中移除,进入状态c,此时依赖调度的输出有b1、c1和a2;

s24:在2:00时,任务b1被调度,当任务b1执行成功时,调度器会将任务b1从任务有向无环图中移除,进入状态d,此时依赖调度的输出有c1和a2;

s25:同理,当任务c1被调度并执行成功时,调度器移除任务c1,进入状态e,此时依赖调度的输出有d1和a2;

s26:当任务d1调度并执行成功时,任务组被执行完毕,进入状态f,此时依赖调度的输出只有a2,开始新的一轮依赖调度流程。

进一步,步骤s22中将作业有向无环图作为副本生成新的任务组的具体步骤参考s16。

进一步,任务有向无环图的数据结构存在于调度器的内存中,可以通过哈希的数据结构来表示任务有向无环图,其中键为任务节点,值为依赖该任务的子任务节点列表。当需要移除一个任务及其依赖关系时,只需要在哈希集合中移除该节点。

图5描述了对依赖调度的输出任务进行定时调度的具体流程,定时调度过程是不断循环的过程,每次流程之后需要休眠一段时间,避免占用大量cpu资源,具体步骤如下:

s31:获取依赖调度的输出任务,即获取任务有向无环图中节点入度为0的任务;

s32:按照任务的触发时间对待任务进行排序;

s33:比较当前系统时间和任务的触发时间,筛选出当前需要调度执行的任务;

s34:将满足调度时间的任务分配给执行单元,由执行单元来执行任务程序;

s35:调度器分配完任务之后,进入休眠状态,等待下次定时调度。

图6描述了任务执行结果反馈的具体流程,执行单元执行完任务之后,会向调度器反馈执行结果,调度器根据任务执行结果动态调整依赖调度过程,具体步骤如下:

s41:调度器获取任务执行结果,包括任务基本信息和状态码;

s42:根据任务状态码判断任务是否执行成功,如果执行成功,则转移至步骤s43,如果执行失败,则转移至步骤s44;

s43:将执行成功的任务从任务有向无环图中移除,使得依赖该任务的子任务获得调度的机会,过程结束;

s44:将执行失败的任务所在的任务组从任务有向无环图中移除,报警提示该任务及其任务组执行失败,过程结束;

进一步,任务执行失败包括几种情况,(1)调度器给执行单元分配任务失败;(2)任务运行时抛出运行时异常,即进程退出状态码不为0;(3)作业运行时间过长,超过作业配置的运行超时时间。

显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1