一种支持多任务重跑的调度方法与流程

文档序号:20009180发布日期:2020-02-22 03:54阅读:995来源:国知局
本发明涉及数据处理相关
技术领域
:,尤其是指一种支持多任务重跑的调度方法。
背景技术
::现在常用的azkaban框架是按照project、flow、job来管理的,一个project中包含多个调度流程flow,每个调度流程flow中可以有多个job,每个job可以根据实际需要完成任务(如:读取表,写入表)。现有技术中,当某个job失败后,只能快速重跑job所在的flow。现有azkaban方案遇到任务失败,只能针对单个flow重跑任务,而实际业务可能存在需要多个任务重跑。例如:flow1-job1成功后会将结果记录写到表table1,flow1-job2、flow2-job1、flow3-job1可能都依赖table1的数据,如果flow1-job1执行失败,table1没有数据将影响到多个任务,这时候我们需要逐个手动处理,而这样的操作方式使得数据异常时,补数据的时间大大增加了。技术实现要素:本发明是为了克服现有技术中存在上述的不足,提供了一种能够节省补数据时间的支持多任务重跑的调度方法。为了实现上述目的,本发明采用以下技术方案:一种支持多任务重跑的调度方法,具体包括如下步骤:(1)在azkaban框架下按照project、flow、job依次来管理的,即一个project中包含多个调度流程flow,每个调度流程flow中有多个job;(2)解析每个job中的sql,得到读取的表列表、写入的表列表;(3)每个job包装一个前置任务,前置任务检查读取的表列表是否准备就绪,如果就绪继续执行当前job,如果还没有准备就绪,该前置任务一直轮询直到所有表准备就绪;(4)与此同时,每个job包装一个后置任务,后置任务用来标记所有写入的表列表的状态为就绪状态,以便后续依赖这些表的任务执行;(5)在后台展示所有job的依赖关系图,用一种颜色表示执行失败,当遇到执行失败时,只要修复好当前节点涉及的表,其他任务就能自动往下执行。通过本方法的设计,当某个job失败后,不需要重跑job所在的调度流程flow,而是针对该job进行一直轮询,故而能够大大节省数据异常时,补数据的时间;还可以根据表的依赖关系得到数据血缘关系图,根据数据血缘关系图可以优化业务数仓的设计。作为优选,在步骤(2)中,通过以下两个阶段来得到读取的表列表、写入的表列表:第一阶段是人工整理并录入数据库,第二阶段是通过封装apachehive这个开源项目里面的sql解析模块来实现。作为优选,在步骤(3)和步骤(4)中,前置任务会一直轮询依赖资源的状态,当依赖的资源已准备就绪,才启动job执行,保证job在执行的时候所有资源都准备就绪了;后置任务主要是将自己完成修改的资源状态修改为就绪,方便其他下游任务及时检测到,并启动job;通过将状态记录到数据库,方便写入和读取;前置任务、job、后置任务是对一个job的封装,是串行结构。作为优选,在步骤(5)中,在后台展示所有job的依赖关系图,用一种颜色表示执行成功,另一种颜色表示执行失败,从而根据表的依赖关系得到数据血缘关系图,根据数据血缘关系图,当遇到执行失败时,只要修复好当前节点涉及的表,其他任务就能自动往下执行。本发明的有益效果是:能够大大节省数据异常时,补数据的时间;还可以根据表的依赖关系得到数据血缘关系图,根据数据血缘关系图可以优化业务数仓的设计。具体实施方式下面结合具体实施方式对本发明做进一步的描述。一种支持多任务重跑的调度方法,具体包括如下步骤:(1)在azkaban框架下按照project、flow、job依次来管理的,即一个project中包含多个调度流程flow,每个调度流程flow中有多个job;(2)解析每个job中的sql,得到读取的表列表、写入的表列表;通过以下两个阶段来得到读取的表列表、写入的表列表:第一阶段是人工整理并录入数据库,第二阶段是通过封装apachehive这个开源项目里面的sql解析模块来实现;(3)每个job包装一个前置任务,前置任务检查读取的表列表是否准备就绪,如果就绪继续执行当前job,如果还没有准备就绪,该前置任务一直轮询直到所有表准备就绪;(4)与此同时,每个job包装一个后置任务,后置任务用来标记所有写入的表列表的状态为就绪状态,以便后续依赖这些表的任务执行;其中:前置任务会一直轮询依赖资源的状态,当依赖的资源已准备就绪,才启动job执行,保证job在执行的时候所有资源都准备就绪了;后置任务主要是将自己完成修改的资源状态修改为就绪,方便其他下游任务及时检测到,并启动job;通过将状态记录到数据库,方便写入和读取;前置任务、job、后置任务是对一个job的封装,是串行结构;例如(前置任务、job1、后置任务)、(前置任务、job2、后置任务),假设job2的前置任务依赖job1的后置任务的输出,那是会有影响的;(5)在后台展示所有job的依赖关系图,用一种颜色表示执行失败,当遇到执行失败时,只要修复好当前节点涉及的表,其他任务就能自动往下执行;具体地,在后台展示所有job的依赖关系图,用一种颜色表示执行成功,另一种颜色表示执行失败,从而根据表的依赖关系得到数据血缘关系图,根据数据血缘关系图,当遇到执行失败时,只要修复好当前节点涉及的表,其他任务就能自动往下执行;其中:任务执行是一个动态过程,血缘关系图是一个静态数据,我们可以提前通过解析sql得到血缘关系图。通过本方法的设计,当某个job失败后,不需要重跑job所在的调度流程flow,而是针对该job进行一直轮询,故而能够大大节省数据异常时,补数据的时间;还可以根据表的依赖关系得到数据血缘关系图,根据数据血缘关系图可以优化业务数仓的设计。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1