数据任务的处理方法及任务调度器与流程

文档序号:12120129阅读:558来源:国知局
数据任务的处理方法及任务调度器与流程

本发明涉及计算机技术领域,尤其涉及一种数据任务的处理方法及任务调度器。



背景技术:

当前,互联网企业越来越重视大数据的收集,例如网络销售数据、用户行为数据等。面对越来越大的数据量,大部分企业选择目前较成熟的Hadoop+Hive作为分布式数据处理框架。

借助Hadoop+Hive分布式数据处理框架,企业能轻易的处理上亿级别的数据。通常数据处理工作流程包含若干步骤,每个步骤都有数量不定的数据处理任务组成,这些数据处理任务之间可能存在依赖关系,也可能是独立的。对于存在依赖关系的任务,需要严格遵守先后顺序,否则会造成数据结果错误。因此,如何管理日常数据处理工作流程,使数据处理任务高效、有序地进行,是大数据运用中的一大难点和重点。

面对以上问题,目前的解决方案有两种:自动串行执行、借助Oozie。

在自动串行执行的技术方案中,数据工程师首先新建一个脚本文件,并在脚本文件中依次地、按照既定顺序写下日常数据处理工作流程各个步骤的数据处理任务,系统根据自动串行的脚本文件依次执行数据处理的任务,完成日常数据处理流程。然而,由于数据处理任务直接可能是独立的,例如指标A与指标B的计算毫无关联,对应的任务是可以并行执行的,而且在数据处理的任务非常多的情况下,自动串行执行任务,会大大降低运行工作效率。另一方面,若其中一个数据处理任务出错,由于脚本运行的特点,整个处理流程将跳过错误并继续执行,而数据处理任务之间可能是存在依赖关系的,因此可能导致数据处理的结果发生错误。

在Oozie的技术方案中,引入了一个工作流定义的文档,在这个文档定义了任务的依赖关系、任务的走向等。Oozie可以根据这个文档,判断当前有哪些任务是可以安全的同时执行的,其相比于自动串行的技术方案,提高了可靠性。但是,由于Oozie文档过于复杂,在实际生产环境中,成千上百个数据处理任务的工作流程是极其常见的,若此时使用Oozie,将带来高昂的文档维护成本,工作效率低下。



技术实现要素:

本发明实施例提出一种数据任务的处理方法及任务调度器,能并行处理数据任务,并提高工作效率。

本发明实施例提供一种数据任务的处理方法,包括:

从任务表中调取一个待执行的任务;其中,所述任务表记载有多个任务及每个任务的依赖关系项,且所述任务表中记载的任务可被多个任务调度器调取;

根据所调取的任务的依赖关系项,获取所述任务的依赖信息;

根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理。

进一步地,所述从任务表中调取一个待执行的任务,具体包括:

从所述任务表中按任务队列顺序选择一个任务;

根据所述任务的标识,从数据存储区中查询所述任务的调取信息及执行信息;其中,所述数据存储区记录有所述任务表中每个任务的调取信息及执行信息,所述调取信息用于记录所述任务是否已被任务调度器调取,所述执行信息用于记录所述任务是否已被提交给任务处理器正在执行以及是否执行成功;

当所选择的任务未被调取,或者所选择的任务已被调取但未被提交给任务处理器执行,或者所选择的任务已被提交给任务处理器执行但执行失败时,调取所述任务,并在所述数据存储区记录所述任务已被调取;

当所选择的任务已被调取且已被提交给任务处理器正在执行,或者所选择的任务已被调取且执行成功时,继续从所述任务表中按任务队列顺序选择下一 个任务。

再进一步地,所述依赖关系项中包含依赖信息;则所述根据所调取的任务的依赖关系项,获取所述任务的依赖信息,具体为:

从所调取的任务的依赖关系项中,直接获得所述任务的依赖信息;

或者,所述依赖关系项中包含自动依赖判断标识;则所述根据所调取的任务的依赖关系项,获取所述任务的依赖信息,具体为:

根据所调取的任务的依赖关系项中的自动依赖判断标识,启动自动依赖判断;

扫描所述任务的具体执行内容,从中获得所述任务的依赖信息。

在一个实施方式中,所述依赖信息为所述任务所依赖的启动时刻;

则根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

判断所述任务所依赖的启动时刻是否早于当前时刻;

若是,则判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

若否,则判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

在另一个实施方式中,所述依赖信息为所述任务所依赖的任务的标识;

则根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

根据所调取的任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

若是,则判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

若否,则判定当前状态不符合执行条件,在所述数据存储区记录所调取的 任务未被提交给任务处理器执行。

在又一个实施方式中,所述依赖信息为所调取的任务所依赖的启动时刻和所依赖的任务的标识;

则根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

判断所述任务所依赖的启动时刻是否早于当前时刻;

当所述启动时刻早于当前时刻时,根据所述任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

当所依赖的任务执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

当所述启动时刻晚于当前时刻,或者所述启动时刻早于当前时刻但所依赖的任务未被执行成功时,则判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

进一步地,在将所调取的任务提交给任务处理器执行数据处理之后,还包括:

接收所述任务处理器返回的任务执行结果;

将所述任务执行结果保存于数据存储区;

继续从所述任务表中调取下一个待执行的任务,直至所述任务表中记载的任务全被执行成功为止。

进一步地,在接收所述任务处理器返回的任务执行结果之后,还包括:

根据所述任务执行结果判断所述任务是否执行成功;

若是,则在所述数据存储区中记录所述任务执行成功;

若否,则在所述数据存储区中记录所述任务执行失败。

进一步地,在所述数据存储区中记录所述任务执行失败之后,还包括:

根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口;

或者,对所述任务执行失败的次数加一,在加一后的次数大于报警门限值时,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口。

相应地,本发明实施例还提供一种任务调度器,包括:

任务调取模块,用于从任务表中调取一个待执行的任务;其中,所述任务表记载有多个任务及每个任务的依赖关系项,且所述任务表中记载的任务可被多个任务调度器调取;

依赖获取模块,用于根据所调取的任务的依赖关系项,获取所述任务的依赖信息;和,

任务处理模块,用于根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理。

进一步地,所述任务调取模块具体包括:

任务选择单元,用于从所述任务表中按任务队列顺序选择一个任务;

第一查询单元,根据所述任务的标识,从数据存储区中查询所述任务的调取信息及执行信息;其中,所述数据存储区记录有所述任务表中每个任务的调取信息及执行信息,所述调取信息用于记录所述任务是否已被任务调度器调取,所述执行信息用于记录所述任务是否已被提交给任务处理器正在执行以及是否执行成功;

任务调取单元,用于当所选择的任务未被调取,或者所选择的任务已被调取但未被提交给任务处理器执行,或者所选择的任务已被提交给任务处理器执行但执行失败时,调取所述任务,并在所述数据存储区记录所述任务已被调取;

所述任务选择单元,还用于当所选择的任务已被调取且已被提交给任务处理器正在执行,或者所选择的任务已被调取且执行成功时,继续从所述任务表中按任务队列顺序选择下一个任务。

进一步地,所述依赖关系项中包含依赖信息,则所述依赖获取模块具体用于从所调取的任务的依赖关系项中,直接获得所述任务的依赖信息;

或者,所述依赖关系项中包含自动依赖判断标识,则所述依赖获取模块, 具体包括:

启动自判断单元,用于根据所调取的任务的依赖关系项中的自动依赖判断标识,启动自动依赖判断;和,

扫描获取单元,用于扫描所述任务的具体执行内容,从中获得所述任务的依赖信息。

在一个实施方式中,所述依赖信息为所述任务所依赖的启动时刻;则所述任务处理模块具体包括:

第一判断单元,用于判断所述任务所依赖的启动时刻是否早于当前时刻;

第一任务提交单元,用于当所述任务所依赖的启动时刻早于当前时刻时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;和,

第一信息记录单元,用于当所述任务所依赖的启动时刻晚于当前时刻时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

在另一个实施方式中,所述依赖信息为所述任务所依赖的任务的标识,则所述任务处理模块具体包括:

第二查询单元,用于根据所调取的任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

第二任务提交单元,用于当所依赖的任务已被所述任务处理器执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;和,

第二信息记录单元,用于当所依赖的任务未被所述任务处理器执行成功时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

在又一个实施方式中,所述依赖信息为所调取的任务所依赖的启动时刻和 所依赖的任务的标识,则所述任务处理模块具体包括:

第二判断单元,用于判断所述任务所依赖的启动时刻是否早于当前时刻;

第三查询单元,用于当所述启动时刻早于当前时刻时,根据所述任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

第三任务提交单元,用于当所依赖的任务执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;和,

第三信息记录单元,用于当所述启动时刻晚于当前时刻,或者所述启动时刻早于当前时刻但所依赖的任务未被执行成功时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

进一步地,所述任务调度器还包括:

信息接收模块,用于接收所述任务处理器返回的任务执行结果;和,

信息转存模块,用于将所述任务执行结果保存于数据存储区;

所述任务调取模块,还用于在将所述任务执行结果保存于数据存储区之后,继续从所述任务表中调取下一个待执行的任务,直至所述任务表中记载的任务全被执行成功为止。

进一步地,所述任务调度器还包括:

第二判断模块,用于在接收所述任务处理器返回的任务执行结果之后,根据所述任务执行结果判断所述任务是否执行成功;

第四信息记录模块,用于当所述任务执行成功时,则在所述数据存储区中记录所述任务执行成功;和,

第五信息记录模块,用于当所述任务执行失败时,则在所述数据存储区中记录所述任务执行失败。

进一步地,所述任务调度器还包括:

报警模块,用于在所述数据存储区中记录所述任务执行失败之后,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口;或 者,用于在所述数据存储区中记录所述任务执行失败之后,对所述任务执行失败的次数加一,在加一后的次数大于报警门限值时,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口。

实施本发明实施例,具有如下有益效果:

本发明实施例提供的数据任务的处理方法和任务调度器,能使多个任务调度器并行地分别从任务表中调取待执行的任务。其中,所述任务表记载有多个任务及每个任务的依赖关系项,所述依赖关系项的添加简单易行,能提高工作效率;且任务调度器能从所调取的任务的依赖关系项中,解析出所调取的任务的依赖关系,当根据所述依赖信息判定当前状态符合执行条件时,再将所调取的任务提交给任务处理器执行数据处理,从而使得任务有序地执行,保证数据处理不出错,并提高多个任务调度器并行处理任务的工作效率。

附图说明

图1是本发明提供的数据任务的处理方法的一个实施例的流程示意图;

图2是图1所提供的数据任务的处理方法的步骤S1的一个实施例的流程示意图;

图3是本发明提供的任务调度器的一个实施例的结构示意图;

图4是本发明提供的任务调度器的任务调取模块的一个实施例的结构示意图;

图5是本发明提供的任务调度器的依赖获取模块的一个实施例的结构示意图;

图6是本发明提供的任务调度器的任务处理模块的实施方式一的结构示意图;

图7是本发明提供的任务调度器的任务处理模块的实施方式二的结构示意图;

图8是本发明提供的任务调度器的任务处理模块的实施方式三的结构示意图;

图9是本发明提供的用于实现数据任务处理的系统的一个实施例的结构图;

图10是本发明提供的数据任务的处理方法的另一个实施例的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种数据任务的处理方法,能使多个任务调度器并行地分别从任务表中调取待执行的任务,并能够从任务表中每个任务的依赖关系项解析出任务的依赖关系,根据所述依赖信息有序地执行任务,保证数据处理不出错,并提高多个任务调度器并行处理任务的工作效率。

为方便描述,下面仅以其中一个任务调度器为例,对任务调度器如何进行任务调度的方法进行详细说明,其他任务调度器进行任务调度的方法也相同,本发明不一一赘述。

参见图1,是本发明提供的数据任务的处理方法的一个实施例的流程示意图。该方法可由任务调度器来执行,包括步骤S1至步骤S3,具体如下:

S1,从任务表中调取一个待执行的任务;其中,所述任务表记载有多个任务及每个任务的依赖关系项,且所述任务表中记载的任务可被多个任务调度器调取。

在本实施例中,工程师可根据任务表的任务量灵活设置任务调度器数量,以使得多个任务调度器能够并行地处理任务表中的任务。其中,多个任务调度器可以定期工作,在启动后,自动调取任务表中的任务进行处理。工程师可以根据具体情况进行设置任务调度器的数量及定期工作的时间。

所述任务表一般为一个可执行的自动串行脚本文件,记载多个任务命令行及每一个任务命令行的依赖关系项,工程师只需在每个任务命令行后面直接添加该任务命令行的依赖关系项,所述依赖关系项包含该任务的依赖信息,即可 实现所述任务表的每个任务的依赖关系的配置,简单易行,提高工作效率。

S2,根据所调取的任务的依赖关系项,获取所述任务的依赖信息。

在本实施例中,任务调度器利用“正则表达式”的匹配方法,匹配任务的依赖关系项,从中获取任务的依赖信息,例如,正则表达式为“\s*##@{}”,具体实施可以为:读入所调取的任务,当读到一个依赖关系标识“\s*##@”时,则所述依赖关系标识后面“{}”的括号信息为任务的依赖信息,任务调度器即从“{}”中可获取所述任务的依赖信息。

S3,根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理。

在本实施例中,所述依赖信息用于记载任务的依赖关系,该依赖关系可以为依赖于时间,即指定任务的启动时刻,当任务的启动时刻早于当前时刻时,任务才可以提交给任务处理器执行;该依赖关系还可以为依赖于任务,即本任务的执行需要依赖于其他任务,当所依赖的任务均已被执行成功时,本任务才可以提交任务处理器执行。

进一步地,如图2所示,在上述步骤S1中,所述从任务表中调取一个待执行的任务,具体包括步骤S101至S104,如下:

S101,从所述任务表中按任务队列顺序选择一个任务。

具体地,在一个实施方式中,所述任务队列顺序是:一个任务接着另一个任务排列成队的顺序;即任务调度器可从任务队列的开始处按顺序逐一地选择任务。在另一个实施方式中,所述任务表的每一个任务还包括优先级,则所述任务队列顺序是:每个任务的优先级从高到低的顺序,相同级别的任务按一个任务接着另一个任务排列成队的顺序;即,任务调度器可根据任务表中每一个任务的优先级顺序逐一地选择任务。在具体实施当中,工程师可以根据具体情况设置任务表中每个待执行任务的顺序。

S102,根据所述任务的标识,从数据存储区中查询所述任务的调取信息及执行信息;其中,所述数据存储区记录有所述任务表中每个任务的调取信息及执行信息,所述调取信息用于记录所述任务是否已被任务调度器调取,所述执 行信息用于记录所述任务是否已被提交给任务处理器正在执行以及是否执行成功。

在本实施例中,工程师为每个任务配置一个标识,所述标识可以是该任务的具体命令行,也可以是该任务的简名。而数据存储区所记录的每个任务的调取信息和执行信息,均与对应任务的标识关联记录。任务调度器只需在数据存储区查找该任务的标识,即可查询该任务的调取信息和执行信息,获知该任务的状态。其中,每一个任务可能存在以下五种状态:

其一,该任务未被任务调度器调取,也未提交给任务处理器执行;

其二,该任务已被任务调度器调取,但由于不符合执行条件等原因,而未提交给任务处理器执行;

其三,该任务已被任务调度器调取,且已被提交给任务处理器正在执行;

其四,该任务已被任务调度器调取,且已被提交给任务处理器执行,并执行成功;

其五,该任务已被任务调度器调取,且已被提交给任务处理器执行,但执行失败。

相应地,在数据存储区所记录的该任务的调取信息和执行信息中,可以采用具体的调取标识和执行标识以区分以上五种状态。

在本实施例中,由于数据存储区所记录的每个任务的调取信息和执行信息,均与对应任务的标识关联记录,故,当任务表的任务被中断处理后,或者任务调度器再次启动时,根据该任务表中每个任务的标识以及是否执行成功的状态信息,跳过已执行成功的任务,只需从该任务表中的未被执行成功的任务开始,按任务队列顺序选择一个任务继续处理,而不需要从所述第二任务表中的第1项任务开始选择一个任务进行处理。

另外,由于在具体实施当中,任务表会被定期地调整,可能会产生很多不同的任务表,且任务调度器所调取的任务表还有可能被中断处理。为了使任务调度器在断点重启之后,能够准确地调取被中断的任务表,且提高处理效率,本发明实施例还可以进一步引入“时间标识”,通过时间标识来记录任务调度器 所调取的任务表。

优选的,本实施例可以将任务调度器启动的日期作为时间标识,或者按照特定的算法对该日期进行计算后,获得时间标识;又或者工程师输入一个日期,并根据另一特定的算法对该日期进行计算,获得时间标识。例如,在第一天,多个任务调度器启动,准备处理第一任务表中的任务,则根据当天的日期生成第一时间标识,并将该第一时间标识与第一任务表中所有任务的标识关联,并记录在数据存储区中。在第二天,多个任务调度器启动,准备处理第二任务表中的任务,则根据当天的日期生成第二时间标识,并将该第二时间标识与第二任务表中所有任务的标识关联,并记录在数据存储区中。假设在第二天,当第二任务表中的前100项任务被执行成功后,发生中断。当任务调度器再次启动时,根据工程师输入的发生中断的日期生成第二时间标识,并从数据存储区中查询与第二时间标识相关联的所有任务的执行状态,获知第二任务表中前100项任务被执行成功,则该任务调度器可跳过前100项任务,只需从所述第二任务表中的第101项任务开始,按任务队列顺序选择一个任务继续处理,而不需要从所述第二任务表中的第1项任务开始选择,因此本发明实施例不仅可以在断点重启之后准确地调取被中断的任务表,且可以提高处理效率。

S103,当所选择的任务未被调取,或者所选择的任务已被调取但未被提交给任务处理器执行,或者所选择的任务已被提交给任务处理器执行但执行失败时,调取所述任务,并在所述数据存储区记录所述任务已被调取。

S104,当所选择的任务已被调取且已被提交给任务处理器正在执行,或者所选择的任务已被调取且执行成功时,继续从所述任务表中按任务队列顺序选择下一个任务。

在本发明中,依赖信息的获取方法有两种,如下:

在一种实施方式中,所述依赖关系项中包含依赖信息;则所述根据所调取的任务的依赖关系项,获取所述任务的依赖信息,具体为:从所调取的任务的依赖关系项中,直接获得所述任务的依赖信息。

具体地,所述任务的依赖关系项为“\s*##@{}”,“{}”括号里面为依赖信 息,例如,依赖信息是任务所依赖的启动时刻{‘time’:${dt}2015-8-16 08:00:00},time为任务所依赖的启动时刻的标识,${dt}后面的时间2015-8-16 08:00:00为任务所依赖的具体启动时刻;依赖信息是任务所依赖的任务的标识{‘rely’:‘taskA’},用于指示该任务是依赖于任务taskA的执行成功,rely是用于指示该任务依赖于任务taskA的执行成功的标识,taskA为任务所依赖的任务的具体标识;依赖信息是任务的简名{‘name’:‘taskB’},name是为该任务配置简名的标识,taskB是为该任务配置的简名,该任务的简名与该任务的标识关联记录数据存储区。以上所述的标识可以但不限于为time、rely、name。

在另一种实施方式中,所述依赖关系项中包含自动依赖判断标识;则所述根据所调取的任务的依赖关系项,获取所述任务的依赖信息,具体为:根据所调取的任务的依赖关系项中的自动依赖判断标识,启动自动依赖判断;扫描所述任务的具体执行内容,从中获得所述任务的依赖信息。

具体地,所述任务的依赖关系项为“\s*##@{}”,“{}”括号里面是自动依赖判断标识,所述自动依赖判断标识可以但不限于为‘autorely’:‘1’,当任务调度器扫描到任务的自动依赖判断标识时,启动自动依赖判断,根据该任务的标识,跳转到该任务的具体执行内容的文件中,扫描具体执行内容,当扫描到用于指示任务的依赖信息的关键词时,即可获取依赖信息,所述关键词可以根据具体情况由工程师设置,只需统一标准即可。在本实施例中,由于任务的具体执行内容基于SQL语言构建,因而该具体执行内容在构建过程中已包含该任务的依赖信息,且该任务的依赖信息紧随FROM或JOIN之后,从而,当任务调度器扫描到具体执行内容的关键词FROM或JOIN时,任务调度器获取紧跟FROM或JOIN之后信息,即可获得所述任务的依赖信息。另外,在该任务表的任务相当多的情况下,只需要在任务表的每个任务后面直接复制粘贴上包含自动依赖判断的标识的依赖关系项“\s*##@{‘autorely’:‘1’}”,即可实现依赖关系项的配置,配置简单易行,并提高工作效率,降低时间与人力的成本。

在本发明中,依赖信息可以为依赖于启动时刻,或者为依赖于其他任务,或者两者的结合,下面分别举例,对上述步骤S3中,如何根据依赖信息判断当 前状态是否符合执行条件,从而将所调取的任务提交给任务处理器执行数据处理的方法进行详细说明。

在一个实施方式中,所述依赖信息为所述任务所依赖的启动时刻;则上述步骤S3中,根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

判断所述任务所依赖的启动时刻是否早于当前时刻;

若是,则判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

若否,则判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。例如,在所述数据存储区所记录的该任务的执行信息中,写入一个特定字符,或者使该执行信息中的某个位为空,以此记录该任务未被提交给任务处理器执行。

需要说明的是,当判定当前状态不符合执行条件时,任务调度器还会跳过所述任务,并继续从所述任务表中按任务队列顺序选择下一个任务,即返回步骤S1继续从任务表中调取下一个待执行的任务,直到任务表中的所有任务都执行成功为止。

在本实施例中,所述任务所依赖的启动时刻,例如为{‘time’:${dt}2015-8-16 08:00:00},其中,‘time’为启动时刻的标识,具体的启动时刻就是2015-8-16 08:00:00,当具体的启动时刻2015-8-16 08:00:00早于当前时刻,或启动时刻2015-8-16 08:00:00与当前时刻相同时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理。

在另一个实施方式中,所述依赖信息为所述任务所依赖的任务的标识;则上述步骤S3中,根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

根据所调取的任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

若是,则判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

若否,则判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

需要说明的是,当判定当前状态不符合执行条件时,任务调度器还会跳过所述任务,并继续从所述任务表中按任务队列顺序选择下一个任务,即返回步骤S1继续从任务表中调取下一个待执行的任务,直到任务表中的所有任务都执行成功为止。

在本实施例中,任务taskC所依赖的任务的标识,可以为{‘rely’:‘taskA’},其中rely用于指示任务taskC依赖于任务taskA的执行成功,taskA是任务taskC所依赖的任务的具体标识;任务调度器根据任务taskC所依赖的任务的具体标识taskA,从所述数据存储区中查询所依赖的任务taskA是否已被所述任务处理器执行成功,当taskA已被执行成功时,将任务taskC提交给任务处理器执行数据处理。所述任务所依赖的任务可以为多个,当多个依赖任务均已执行成功,所述任务才可提交给任务处理器执行数据处理。

在又一个实施方式中,所述依赖信息为所调取的任务所依赖的启动时刻和所依赖的任务的标识;则上述步骤S3中,根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理,具体包括:

判断所述任务所依赖的启动时刻是否早于当前时刻;

当所述启动时刻早于当前时刻时,根据所述任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

当所依赖的任务执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

当所述启动时刻晚于当前时刻,或者所述启动时刻早于当前时刻但所依赖的任务未被执行成功时,则判定当前状态不符合执行条件,在所述数据存储区 记录所调取的任务未被提交给任务处理器执行。

需要说明的是,当所述启动时刻晚于当前时刻,或者所述启动时刻早于当前时刻但所依赖的任务未被执行成功时,判定当前状态不符合执行条件,任务调度器还会跳过所述任务,并继续从所述任务表中按任务队列顺序选择下一个任务,即返回步骤S1继续从任务表中调取下一个待执行的任务,直到任务表中的所有任务都执行成功为止。

在本实施例中,所述任务taskC所依赖的启动时刻和所依赖的任务的标识,可以为{‘time’:${dt}2015-8-16 08:00:00}、{‘rely’:‘taskA’};或者为{‘time’:${dt}2015-8-16 08:00:00,‘rely’:‘taskA’},则当具体的启动时刻08:00:00早于或等于当前时刻,且所依赖的任务taskA已执行完成时,才可以将任务taskC提交给任务处理器执行数据处理。

进一步地,在将所调取的任务提交给任务处理器执行数据处理之后,还包括:

接收所述任务处理器返回的任务执行结果;

将所述任务执行结果保存于数据存储区;

继续从所述任务表中调取下一个待执行的任务,直至所述任务表中记载的任务全被执行成功为止。

在本实施例中,任务调度器在接收到任务执行结果之后,才可以调取下一个待执行的任务,以避免该任务调度器在处理任务时产生冲突。另外,所述任务执行结果可以但不限于包括任务执行的开始与结束时间、任务执行耗时、任务执行成功或失败的信息以及执行失败的原因,本发明将任务执行结果保存于数据存储区,可以方便后期的问题排查和优化,例如,工程师从数据存储区中发现某个任务的任务执行耗时一直很高,可以考虑进一步优化此任务。

进一步地,在接收所述任务处理器返回的任务执行结果之后,还包括:

根据所述任务执行结果判断所述任务是否执行成功;

若是,则在所述数据存储区中记录所述任务执行成功;

若否,则在所述数据存储区中记录所述任务执行失败。

在本实施例中,任务处理器在数据存储区中所记录的所有关于该任务的信息,都与该任务的标识关联存储,以便于任务处理器可以根据该任务的标识即可快速查询该任务的信息。

进一步地,在所述数据存储区中记录所述任务执行失败之后,还包括:

根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口;

或者,对所述任务执行失败的次数加一,在加一后的次数大于报警门限值时,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口。

在本实施例中,优先地,采用对所述任务执行失败的次数加一,在加一后的次数大于报警门限值时,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口这一报警方法,可以进一步地提高工作效率及任务执行的可靠性。

本发明实施例提供的数据任务的处理方法,能使多个任务调度器并行地分别从任务表中调取待执行的任务。其中,所述任务表记载有多个任务及每个任务的依赖关系项,所述依赖关系项的添加简单易行,能提高工作效率;且任务调度器能从所调取的任务的依赖关系项中,解析出所调取的任务的依赖关系,当根据所述依赖信息判定当前状态符合执行条件时,再将所调取的任务提交给任务处理器执行数据处理,从而使得任务有序地执行,保证数据处理不出错,并提高多个任务调度器并行处理任务的工作效率。

本发明实施例还提供一种任务调度器和实现数据任务处理的系统,能够实施上述数据任务的处理方法的所有流程,下面结合图3至图10进行详细描述。

参见图3,是本发明提供的任务调度器一个实施例的结构示意图。

如图3所示,本发明实施例还提供一种任务调度器,包括任务调取模块10、依赖获取模块20和任务处理模块30,其中:

任务调取模块10,用于从任务表中调取一个待执行的任务;其中,所述任 务表记载有多个任务及每个任务的依赖关系项,且所述任务表中记载的任务可被多个任务调度器调取;

依赖获取模块20,用于根据所调取的任务的依赖关系项,获取所述任务的依赖信息;

任务处理模块30,用于根据所述依赖信息判定当前状态符合执行条件时,将所调取的任务提交给任务处理器执行数据处理。

进一步地,如图4所示,其是本发明提供的任务调度器的任务调取模块的一个实施例的结构示意图,所述任务调取模块10,具体包括任务选择单元11、第一查询单元12和任务调取单元13,其中,

任务选择单元11,用于从所述任务表中按任务队列顺序选择一个任务;

第一查询单元12,根据所述任务的标识,从数据存储区中查询所述任务的调取信息及执行信息;其中,所述数据存储区记录有所述任务表中每个任务的调取信息及执行信息,所述调取信息用于记录所述任务是否已被任务调度器调取,所述执行信息用于记录所述任务是否已被提交给任务处理器正在执行以及是否执行成功;

任务调取单元13,用于当所选择的任务未被调取,或者所选择的任务已被调取但未被提交给任务处理器执行,或者所选择的任务已被提交给任务处理器执行但执行失败时,调取所述任务,并在所述数据存储区记录所述任务已被调取;

所述任务选择单元11,还用于当所选择的任务已被调取且已被提交给任务处理器正在执行,或者所选择的任务已被调取且执行成功时,继续从所述任务表中按任务队列顺序选择下一个任务。

进一步地,所述依赖关系项中包含依赖信息,则所述依赖获取模块20具体,用于从所调取的任务的依赖关系项中,直接获得所述任务的依赖信息;

或者,所述依赖关系项中包含自动依赖判断标识,则如图5所示,其是本发明提供的任务调度器的依赖获取模块的一个实施例的结构示意图,所述依赖获取模块20,具体包括启动自判断单元22和扫描获取单元23,其中,

启动自判断单元22,用于根据所调取的任务的依赖关系项中的自动依赖判断标识,启动自动依赖判断;

扫描获取单元23,用于扫描所述任务的具体执行内容,从中获得所述任务的依赖信息。

在一个实施方式中,所述依赖信息为所述任务所依赖的启动时刻,则,如图6所示,其是本发明提供的任务调度器的任务处理模块的实施方式一的结构示意图,所述任务处理模块30,具体包括第一判断单元311、第一任务提交单元312和第一信息记录单元313,其中,

第一判断单元311,用于判断所述任务所依赖的启动时刻是否早于当前时刻;

第一任务提交单元312,用于当所述任务所依赖的启动时刻早于当前时刻时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;和;

第一信息记录单元313,用于当所述任务所依赖的启动时刻晚于当前时刻时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

在另一个实施方式中,所述依赖信息为所述任务所依赖的任务的标识,则,如图7所示,其是本发明提供的任务调度器的任务处理模块的实施方式二的结构示意图,所述任务处理模块30,具体包括第二查询单元321、第二任务提交单元322和第二信息记录单元323,其中,

第二查询单元321,用于根据所调取的任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

第二任务提交单元322,用于当所依赖的任务已被所述任务处理器执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

第二信息记录单元323,用于当所依赖的任务未被所述任务处理器执行成功时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

在又一个实施方式中,所述依赖信息为所调取的任务所依赖的启动时刻和所依赖的任务的标识,则,如图8所示,其是本发明提供的任务调度器的任务处理模块的实施方式三的结构示意图,所述任务处理模块30,具体包括第二判断单元331、第三查询单元332、第三任务提交单元333和第三信息记录单元334,其中,

第二判断单元331,用于判断所述任务所依赖的启动时刻是否早于当前时刻;

第三查询单元332,用于当所述启动时刻早于当前时刻时,则根据所述任务所依赖的任务的标识,从所述数据存储区中查询所依赖的任务是否已被所述任务处理器执行成功;

第三任务提交单元333,用于当所依赖的任务执行成功时,判定当前状态符合执行条件,将所调取的任务提交给所述任务处理器执行数据处理,并在所述数据存储区记录所调取的任务已被提交给任务处理器正在执行;

第三信息记录单元334,用于当所述启动时刻晚于当前时刻,或者所述启动时刻早于当前时刻但所依赖的任务未被执行成功时,判定当前状态不符合执行条件,在所述数据存储区记录所调取的任务未被提交给任务处理器执行。

进一步地,所述任务调度器,还包括信息接收模块40和信息转存模块50,其中,

信息接收模块40,用于接收所述任务处理器返回的任务执行结果;

信息转存模块50,用于将所述任务执行结果保存于数据存储区;

所述任务调取模块10,还用于在将所述任务执行结果保存于数据存储区之后,继续从所述任务表中调取下一个待执行的任务,直至所述任务表中记载的任务全被执行成功为止。

进一步地,所述任务调度器还包括第二判断模块60、第四信息记录模块70 和第五信息记录模块80,其中,

第二判断模块60,用于在接收所述任务处理器返回的任务执行结果之后,根据所述任务执行结果判断所述任务是否执行成功;

第四信息记录模块70,用于当所述任务执行成功时,则在所述数据存储区中记录所述任务执行成功;

第五信息记录模块80,用于当所述任务执行失败时,则在所述数据存储区中记录所述任务执行失败。

进一步地,所述任务调度器还包括:

报警模块90,用于在所述数据存储区中记录所述任务执行失败之后,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口;或者,用于在所述数据存储区中记录所述任务执行失败之后,对所述任务执行失败的次数加一,在加一后的次数大于报警门限值时,根据所述任务执行结果生成报警邮件,并将所述报警邮件发送至预设的接收端口。

下面将结合图9和图10,对实现数据任务处理的系统及方法进行举例说明。

参见图9,是本发明提供的用于实现数据任务处理的系统的一个实施例的结构图。多个任务调度器1随机启动,读入同一任务表,其中,所述任务表记载有多个任务及每个任务的依赖关系项,多个任务调度器1并行对所述任务表的任务依次有序地进行处理,多个任务调度器1分别根据所调取任务的依赖关系项获取所调取任务的依赖信息,并分别根据所调取任务的依赖信息判断所调取任务的当前状态,其中,当所调取任务的依赖信息包含任务所依赖的任务的标识时,则需根据任务所依赖的任务的标识,向数据存储区2查询所依赖的任务的执行状态,当所调取任务的当前状态符合执行条件时,分别将所调取的任务提交给任务处理器3执行数据处理,否则,跳过此任务,继续调取下一个任务。另外,多个任务调度器1分别将任务处理器3返回的执行结果与所调取任务的标识关联保存于数据存储区2,并分别根据返回的执行结果判断所调取任务是否执行成功,若执行失败,则生成报警邮件,并将报警邮件发送到预设的接收端口4。

参见图10,是本发明提供的数据任务的处理方法的另一个实施例的流程示意图。本发明实施例提供一种更为具体的数据任务的处理方法,包括步骤S202至S214,具体如下:

步骤S202:从任务表中选择一个任务T;

步骤S203:判断任务T是否可被调取;即在数据存储区中查询任务T是否已被任务调度器调取,是否已被提交给任务处理器正在执行以及是否执行成功;

若是,即当任务T未被任务调度器调取,或者任务T已被任务调度器调取但未被提交给任务处理器执行,或者任务T已被任务调度器调取但执行失败时,执行步骤S204;

若否,即当任务T已被任务调度器调取且执行成功,或任务T已被任务调度器调取但已被提交给任务处理器正在执行时,返回步骤S202,继续从所述任务表中按任务队列顺序选择下一个任务T+1;

步骤S204:判断任务依赖项是否存在自动判断标志;

若是,执行步骤S205;若否,直接执行步骤S206;

步骤S205:扫描具体执行内容,获取依赖信息;

步骤S206:判断是否存在启动时刻;

若是,执行步骤S207;若否,执行步骤S208;

步骤S207:判断启动时刻是否早于当前时刻;

若是,执行步骤S208;若否,返回步骤S202,继续从所述任务表中按任务队列顺序选择下一个任务T+1;

步骤S208:判断是否存在所依赖的任务的标识;

若是,执行步骤S209;若否,执行步骤S210;

步骤S209:查询所依赖的任务是否执行成功;

若是,执行步骤S210;若否,返回步骤S202,继续从所述任务表中按任务队列顺序选择下一个任务T+1;

步骤S210:将任务T提交给任务处理器执行数据处理

步骤S211:接收返回的执行结果;

步骤S212:保存返回的执行结果

步骤S213:判断任务是否执行成功;

若是,返回步骤S202,继续从所述任务表中按任务队列顺序选择下一个任务T+1;若否,执行步骤S214。

步骤S214:报警处理;报警处理后,返回步骤S202,继续从所述任务表中按任务队列顺序选择下一个任务。

实施本发明实施例,具有如下有益效果:

本发明实施例提供的任务调度器,可以与其他任务调度器并行地从任务表中调取待执行的任务,其中,所述任务表记载有多个任务及每个任务的依赖关系项,任务调度器能从所调取任务的依赖关系项中,解析所调取任务所依赖的关系,当根据所述依赖信息判定当前状态符合执行条件时,再将所调取的任务提交给任务处理器执行数据处理,从而使得任务有序地执行,保证数据处理不出错,并提高多个任务调度器并行处理任务的工作效率。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

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