一种调度任务的方法和系统与流程

文档序号:17079263发布日期:2019-03-09 00:03阅读:298来源:国知局
一种调度任务的方法和系统与流程

本发明涉及计算机技术,特别地涉及能够在大数据平台上支持跨周期调度任务的方法和装置。



背景技术:

在大数据的分析和应用场景下,由于对不同来源的数据和不同的工作任务的时间要求以及信息响应要求不同,并且对不同任务的资源投入方案也灵活多变,因此难以使用某种单一的周期来满足整个工作流上的任务的个性化需求。其中,工作流是基于用户定义的任务内部的节点依赖关系、在任务调度执行时的执行流程。

例如,传统的采用具有单一时间粒度的任务调度的方案要求所有的任务符合最小任务调度的时间粒度,并且具有较长周期的任务将会被拆分成具有更短的周期的任务;该任务调度方案还要求任务的实际运行必须满足工作流预定义的先后顺序,每次工作流的调度都会按照预定义的顺序执行并消耗相应的资源。

另外,在现有的技术方案中,由于限制了任务调度的时间粒度,因此在任务调度的时候只能采用整个工作流中的最小时间粒度。这样,当工作流发生变更的时候,如果存在时间粒度上的变更,尤其是出现了更小的时间粒度,则要求整个工作流上所有的任务都要变更周期的设置,否则任务无法执行。同时,部分任务需要较长的执行时间。如果强制要求采用短周期的调度方案,则会造成任务的堆积、工作流调度失败甚至整个调度系统的崩溃。此外,在任务的依赖关系方面必须实现任务运行的先后顺序。由于部分前序任务可能在多次执行后结果是一致的,因此强制的调度会消耗掉系统的硬件资源以及工作时间,从而造成系统资源的浪费。

由此可见,由于在任务之间存在依赖关系并且各个任务存在差别,因此在使用传统的调度方法(包括采用单一的时间粒度的调度方法)时,不仅会造成时间和系统资源的浪费,任务调度的方案不得不受到整个工作流中某些任务的执行能力的制约,并且会导致整个系统无法灵活的适应任务变化,甚至在严重时会出现系统的崩溃。



技术实现要素:

根据本发明的一个方面,一种调度任务的方法可以包括:对于到达其触发时间的第一任务,检查作为该第一任务的前序任务的第二任务的触发时间;以及如果所述第二任务已到达其触发时间,则执行该第二任务,否则将该第二任务设置为已完成。

在所述检查操作之前,定义所述第一任务和所述第二任务,然后解析所述第一任务和所述第二任务的依赖关系。

所述定义操作包括:创建所述第一任务和所述第二任务;确定执行所述第一任务和所述第二任务所需要的资源;将与所述第一任务和所述第二任务相关的数据持久化;以及验证所述第一任务和所述第二任务的合法性。

所述定义操作还包括为所述第一任务和所述第二任务设定各自的触发时间和执行顺序。

所述解析所述第一任务和所述第二任务的依赖关系的步骤包括:获取所述第一任务和所述第二任务的触发时间和执行顺序;以及生成包括所述第一任务和所述第二任务的工作流。

根据本发明的一个方面,一种调度任务的方法可以包括:对于未到达其触发时间的一任务,将该任务的状态设置为已完成;以及调度所述任务的后序任务。

根据本发明的一个方面,一种调度至少两个任务的方法可以包括:(1)解析所述至少两个任务之间的依赖关系;(2)根据所述依赖关系,生成一工作流;(3)将所述工作流拆分成至少一个子工作流;(4)选择并执行所述至少一个子工作流中的一个未被执行的子工作流;(5)判断所选择并执行的所述子工作流是否执行成功,并且如果该子工作流执行成功则进入步骤(7),否则进入步骤(6);(6)判断是否需要重跑所述所选择并执行的子工作流,如果需要重跑所述所选择并执行的子工作流,则进入步骤(4),否则调度失败并结束调度;以及(7)判断是否所述至少一个子工作流中的所有子工作流都执行完成,如果所述所有子工作流都执行完则结束调度,否则进入步骤(4)。

所述至少一个子工作流中的每个子工作流具有单向链式结构。

所述至少两个任务之间的依赖关系能够表示为树状结构。

所述步骤(4)包括:(a)启动所述子工作流的执行并调度所述子工作流的起始任务;(b)调度所述子工作流中的一任务,包括为所调度的该任务生成一实例;(c)判断是否到达所述所调度的任务的触发时间,如果已到达所述所调度的任务的触发时间则进入步骤(e),否则进入步骤(d);(d)将所述实例设置为已完成,并进入步骤(f);(e)执行所述实例,如果所述实例执行成功则进入步骤(f),如果所述实例执行失败则结束所述子工作流的执行;(f)判断所述子工作流的所有任务是否都执行完成,如果所述所有任务都执行完成则结束所述子工作流的执行,否则进入步骤(g);以及(g)将所述所调度的任务的后序任务作为要被调度的任务,进入步骤(b)。

根据本发明的一个方面,一种调度任务的系统可以包括:用于对于到达其触发时间的第一任务,检查作为该第一任务的前序任务的第二任务的触发时间的模块;用于如果所述第二任务已到达其触发时间,则执行该第二任务的模块;用于如果所述第二任务未到达其触发时间,则将该第二任务设置为已完成的空跑设置模块。

所述系统还包括:任务定义模块,其在使用所述用于对于到达其触发时间的第一任务,检查作为该第一任务的前序任务的第二任务的触发时间的模块之前,定义所述第一任务和所述第二任务;以及依赖解析模块,其在定义所述第一任务和所述第二任务之后,解析所述第一任务和所述第二任务的依赖关系。

所述任务定义模块还包括:用于创建所述至少两个任务的模块;用于确定执行所述第一任务和所述第二任务所需要的资源的模块;用于将与所述至少两个任务相关的数据持久化的模块;以及用于验证所创建的所述至少两个任务的合法性的模块。

所述任务定义模块还包括:用于为所述第一任务和所述第二任务设定各自的触发时间和执行顺序的模块。

所述依赖解析模块还包括:用于获取所述第一任务和所述第二任务的触发时间和执行顺序的模块;以及用于生成包括所述第一任务和所述第二任务的工作流的模块。

根据本发明的一个方面,一种调度任务的系统可以包括:用于对于未到达其触发时间的一任务,将该任务的状态设置为已完成的模块;以及用于调度所述任务的后序任务的模块。

根据本发明的一个方面,一种调度至少两个任务的系统可以包括:(1)用于解析所述至少两个任务之间的依赖关系的模块;(2)用于根据所述依赖关系,生成一工作流的模块;(3)用于将所述工作流拆分成至少一个子工作流的模块;(4)用于选择并执行所述至少一个子工作流中的一个未被执行的子工作流的模块;(5)用于判断所选择并执行的子工作流是否执行成功,并且如果该子工作流执行成功则进入步骤(7),否则进入步骤(6)的模块;(6)用于判断是否需要重跑所述所选择并执行的子工作流,如果需要重跑所述所选择并执行的子工作流,则进入步骤(4),否则调度失败并结束调度的模块;以及(7)用于判断是否所述至少一个子工作流中的所有子工作流都执行完成,如果所述所有子工作流都执行完则结束调度,否则进入步骤(4)的模块。

所述至少一个子工作流中的每个子工作流具有单向链式结构。

所述至少两个任务之间的依赖关系能够表示为树状结构。

用于选择并执行所述至少一个子工作流中的一个未被执行的子工作流的模块包括:(a)用于启动所述子工作流的执行并调度所述子工作流的起始任务的模块;(b)用于调度所述子工作流中的一任务,包括为所调度的该任务生成一实例的模块;(c)用于判断是否到达所述所调度的任务的触发时间,如果已到达所述所调度的任务的触发时间则进入步骤(e),否则进入步骤(d)的模块;(d)用于将所述实例设置为已完成,并进入步骤(f)的模块;(e)用于执行所述实例,如果所述实例执行成功则进入步骤(f),如果所述实例执行失败则结束所述工作流的执行的模块;(f)用于判断所述子工作流的所有任务是否都执行完成,如果所述所有任务都执行完成则结束所述子工作流的执行,否则进入步骤(g)的模块;以及(g)用于将所述所调度的任务的后序任务作为要被调度的任务,进入步骤(b)的模块。

根据本发明的一个方面,一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令被计算机执行时能够执行如上所述的方法。

在本公开中采用了跨周期调度任务以及将任务的执行状态与实际执行行为分离的思想,通过利用任务空跑机制来匹配在不同周期之间的任务调度的依赖关系并解决任务调度的困难。尤其是在任务定义阶段,可以在工作流上设置具有多个不同的时间粒度的任务,从而可以充分利用系统的资源,并且减少不必要的任务调度,以免造成资源的浪费。

另外,在本公开中,在任务的执行阶段,跨周期调度任务的系统在解析工作流上的周期后,将具有长周期的任务在非触发时间时直接设置成空跑,从而保证依赖它的具有短周期的任务可以正常的运行并调度。因此,这保障了在整个工作流中的各个任务实际上按照预定的周期来运行并调度。

因此,本发明的实施例实现了跨周期调度任务的方法和系统。本发明的实施例在时间粒度方面能够支持更加丰富的周期,能够支持具有不同的时间粒度的任务的相互依赖,还可以确保在具有不同周期的任务之间调度的正确性(即不破坏预设的周期)。

附图说明

图1示出了根据本发明实施例的存在跨周期的任务调度需求的工作流。

图2a示出了根据本发明实施例的执行任务的工作流的流程图。

图2b示出了根据本发明实施例的执行任务的工作流中所包含的子工作流的流程图。

图3示出了根据本发明实施例的将图1中的工作流拆分后得到的子工作流。

图4示出了根据本发明实施例的触发了置空跑功能的工作流。

具体实施方式

现在将参照若干示例性实施例来论述本发明的内容。应当理解,论述了这些实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。

如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。术语“另一个实施例”要被解读为“至少一个其他实施例”。在本文中,“任务执行周期”可以简称为“周期”,而对某个任务进行调度操作可以称为生成该任务的“实例”。

另外,在本文中,在一工作流中的一任务的“前序任务”是指在执行该工作流中的该任务之前的需要被执行的任务。在本文中,在一工作流中的一任务的“后序任务”是指在执行该工作流中的该任务之后的需要被执行的任务。

本发明的实施例采用具有跨周期调度任务的方式来解决大数据平台上的传统任务调度方法中的问题。根据一个实施例,跨周期调度任务的系统包括三个模块:任务定义模块、依赖解析模块以及空跑设置模块。

·任务定义模块

任务定义模块可以定义跨周期的任务。所述定义操作通常包括创建任务、确定执行任务所需要的资源(例如cpu处理时间、内存空间、外部存储空间、网络带宽、数据库中的数据源等等)并将与任务有关的数据持久化,以及验证创建的任务的合法性等。其中,持久化是指将任务数据保存到可永久保存的存储设备(如磁盘中)。使用者可以在定义任务的阶段在工作流中定义具有不同周期的任务,并且具有长周期的任务和具有短周期的任务之间可以任意组合。

任务定义模块提供了具有不同时间粒度的周期。其中,所述周期是指每次执行任务的时间间隔。其中,所述时间粒度是指所述周期的单位,例如,时间粒度包括月、周、天、小时、分钟的级别。可以单个地定义任务,而不需要受到该任务所依赖的任务的周期的限制。在跨周期定义任务的时候,可以按照任务所包含的数据的细节以及所实现的任务的功能的要求等来制定不同的周期,并且还可以通过对要处理的任务的整体规划,实现对硬件以及时间资源的合理分配。

例如,如图1所示,其是一个典型的存在跨周期的任务调度需求的工作流。在图1中,a任务可以是一个资源消耗较大或者数据更新比较不频繁的任务,b任务相对a任务而言具有更高的实时性。

·依赖解析模块

在任务执行时,依赖解析模块可以解析呈树状的任务依赖关系,获取其中各个任务在执行方面的依赖关系以及在不存在环路和分支的工作流下的任务调度的顺序。根据本发明一个实施例,解析过程使用树状结构的遍历算法(例如,dfs算法),将一个工作流w拆解成单向的链式结构的多个子工作流(w1,w2,…)。所述单向的链式结构指的是子工作流内的任务之间的逻辑关系。

通过这样的解析过程,可以获取在不同的任务执行时对前序任务的要求以及工作流的完整执行过程。

依赖解析模块还可以在任务执行时运行以检查依赖关系,可以获取到当前任务的前序任务的周期以及执行状态,以便于在后续的过程中基于下文提到任务空跑机制而设置任务的空跑状态。

在完成对工作流所包含的任务的解析后,可以确定所触发的任务在每一条拆解后的工作流中的顺序,从而在后续过程中为置空跑的操作提供便利。

·空跑设置模块

本发明的实施例采用了任务空跑机制,该任务空跑机制的一个逻辑为:当一任务(通常是指具有相对长周期的任务)没有到达该任务的触发时间,但是依赖该任务的后序任务到达了该后序任务的周期所对应的触发时间时,通过将该任务的状态设置为已完成(即,称为“置空跑”)而不实际执行该任务,从而保证依赖该任务的后序任务可以按照正常的方式进行调度。其中,所述触发时间是指在周期应当执行任务的具体时间点。例如,存在一个任务,其触发时间是每周日的2点,那么其周期是每周,其时间粒度是周。

该任务空跑机制的另一个逻辑为:当一任务未到达该任务的触发时间,将该任务的状态设置为已完成,并调度后序任务。

在本公开中,当开始跨周期执行任务时,通过解析任务的依赖关系获取每个任务的触发时间和执行顺序。例如,如上所述,当该任务未到达其触发时间但依赖于它的后序任务到达了触发时间,空跑机制会将将该任务置空跑。这样可以保证任务按照工作流的顺序完成执行。

此外,利用任务空跑机制将任务设置为已完成,也保证了每一个任务在检查其依赖的任务(即,前序任务)的状态时,不需要分析其前序任务的执行情况,而只需要获取其依赖的任务的状态。其中,任务的状态包括任务已执行完成和任务执行失败。其中,任务的执行情况包括任务正在执行和任务未执行。

根据本发明的一个实施例,可以采用任务空跑机制处理图1中的工作流。例如,通过对a任务采用任务空跑机制,当b任务触发时,不需要使a任务真正的执行,而是直接将a任务在a->b这样的流程中设置为已完成。这样保证了b任务可以正常的执行,并且a任务的自身执行情况不受影响。本发明的实施例还包括其不同构成模块能完成图1所包含和/或暗含的各步骤的系统。

图2a和2b是根据本发明的一个实施例的执行任务的工作流和子工作流的流程图。其中,图2a包括在调度开始的时候对任务的依赖关系进行解析,并包括在执行过程中对工作流和子工作流的完成情况进行判断。根据图2b所示的方法,可以按照对周期的定义与任务的完成情况来确定该任务是需要实际运行还是直接设置成空跑状态。本发明的实施例还包括其不同构成模块能完成图2a和2b的流程图中的各步骤的系统。

在图2a所示的实施例中,执行工作流的方法包括如下步骤:

(1)启动树状工作流的执行。

(2)将所述树状工作流拆分成多个为单向链式结构的子工作流。

(3)选择并执行一个未被执行的子工作流。

(4)判断所述子工作流是否执行成功,如果成功则进入步骤(6),如果不成功则进入步骤(5)。

(5)判断是否需要重跑所述子工作流,如果需要重跑所述子工作流,则进入步骤(3),否则执行失败并结束执行。

(6)判断是否所述树状工作流中的所有子工作流都执行完,如果所有子工作流都执行完则进入步骤(7),否则进入步骤(3)。在本发明的实施例中,可以对已被执行的子工作流设置一个“已执行”的标记。

(7)完成树状工作流的执行并结束该执行。

其中,图1所示的工作流为树状工作流,图3所示的工作流为单向链式结构的工作流。

在图2b中进一步描述了根据本发明的一个实施例的子工作流的执行:

(1)启动子工作流的执行并调度所述子工作流的起始任务。

(2)针对所述子工作流中的所调度的任务生成一实例。

(3)判断是否到达该任务的触发时间,如果已到所述任务的触发时间则进入步骤(5),如果未到所述任务的触发时间,则进入步骤(4)。

(4)将所述实例设置为空跑(设置为已完成),并进入步骤(6)。

(5)执行所述实例,如果所述实例执行成功则进入步骤(6),如果所述实例执行失败则进入步骤(9)。

(6)判断子工作流的所有任务是否都执行完成,如果所有任务都执行完成则进入步骤(8),否则进入步骤(7)。

(7)将所述所调度的任务的后序任务作为要被调度的任务,并进入步骤(2)。

(8)子工作流执行完成并结束。

(9)子工作流执行失败并结束。

其中,所述起始任务是指在一工作流中的不依赖其他任务的一个任务。

另外,根据本发明一个实施例,可以按照任务的依赖关系,将图1所示的工作流拆分成如图3所示的子工作流。其中,图3的三个子工作流程,分别由以下的逻辑产生:

(1)第一子工作流表示的内容是:为了调度d而对a进行设置。由于d和a周期相同(两者的周期均为周),且d的触发时间晚于a,所以a任务完成后,再执行d任务是正确的流程。

(2)第二子工作流表示的内容是:为了调度b而对a进行设置。由于b是每天运行,a是b的前序任务,则生成的第二子工作流中,a设置为每天检查一次,当a不处于触发时间时,将a置空跑,实际上a并不执行。该子工作流中c的周期长于b,所以c等待a、b完成检查后再执行是正确的流程。

(3)第三子工作流表示的内容是:为了调度c而对a进行设置。由于c虽然和a周期相同,但是在同一周期内(例如在一周内,将每周日作为一周的起始日期),c的触发时间早于a,那么a在c的触发时间上会被做一次检查并被置空跑,以保证当c调度时a是成功的。此时,由于b的周期小于c,那么b在c的触发时间上会被做一次检查,并且由于在第二子工作流中b已经执行成功,因此直接将b置空跑。

其中,各任务以字母代称,如a任务简称为a;在图3中,按照图内的上下顺序而定义为第一子工作流、第二子工作流和第三子工作流;其中,第一子工作流对应于a和d任务的工作流,第二子工作流对应于a、b和c任务的工作流、第三子工作流对应于a、b和c任务的工作流。本发明的实施例还包括其不同构成模块能完成图3所包含和/或暗含的各步骤的系统。

本发明的另一个实施例的工作流如图4所示,其中每天执行的任务(b任务)依赖于每周执行的任务(a任务)的完成情况。当每次达到b的触发时间时,将按照以下两种情况进行操作:

(1)如果触发时间为周三,则按照工作流中的常规顺序,先执行a任务,完成a任务后执行b任务;

(2)如果触发时间不为周三,则按照任务空跑机制进行设置。例如,当a任务上次执行状态为成功时,将a任务置空跑,跳过a任务的执行阶段,并开始执行b任务。

这样保证了在实际的运行中,真正每天运行的任务实际只有b任务,从而实现了按任务的实际需要进行调度的功能。本发明的实施例还包括其不同构成模块能完成图4所包含和/或暗含的各步骤的系统。

本发明各实施例的方法和系统可以实现为纯粹的软件(例如用java语言来编写的软件程序,并基于jre8以及以上版本的java运行环境),也可以根据需要实现为纯粹的硬件(例如专用asic芯片或fpga芯片),还可以实现为结合了软件和硬件的系统(例如存储有固定代码的固件系统)。

本发明的另一个方面是一种计算机可读介质,其上存储有计算机可读指令,所述指令被执行时可实施本发明各实施例的方法。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。要求保护的主题的范围仅由所附的权利要求进行限定。

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