基于Azkaban的任务自动调度方法及系统与流程

文档序号:31049013发布日期:2022-08-06 06:13阅读:202来源:国知局
基于Azkaban的任务自动调度方法及系统与流程
基于azkaban的任务自动调度方法及系统
技术领域
1.本发明涉及大数据处理技术领域,特别涉及一种基于azkaban的任务自动调度方法及系统。


背景技术:

2.在大数据业务场景中,每天会有大量业务数据或日志数据经过大数据处理形成数据集市或报表;在此过程中会有很多任务需要执行(如数据抽取,数据转换,数据加载,报表任务等等),任务之间依赖关系复杂,任务方式及调度时间不尽相同。在大数据领域存在多类任务调度工具,如azkaban、xxl-job等,xxl-job是一个优秀的调度管理工具,可满足较为简单的任务,但是针对大数据场景下有复杂依赖的任务并不满足,相比多类调度工具azkaban较为适合复杂场景。
3.azkaban调度可很好的执行复杂性依赖任务,但是azkaban对任务的管理极不方便。如图1所示,现有技术中,azkaban对任务的调度,需要先下载整个任务链路,之后从所有任务中定位此任务依赖并手动变更任务,在此任务管理中极易产生人为错误。另外,当某个任务失败要重新执行此失败任务及其相关依赖时,更是无法定位此任务的依赖关系。因此,急需一种能实现对azkaban任务高效管理的方法。


技术实现要素:

4.本发明的目的在于提供一种基于azkaban的任务自动调度方法及系统,以改善目前手动操作易产生人为错误的问题。
5.为了实现上述发明目的,本发明实施例提供了以下技术方案:
6.一方面,本发明实施例提供了一种基于azkaban的任务自动调度方法,包括以下步骤:
7.建立任务管理的数据库表az_jobs,所述数据库表az_jobs包含字段有:项目名称、类型、任务名称、依赖任务名称、任务执行命令;
8.将数据库表az_jobs表中每条记录生成一个job文件;
9.将生成的job文件压缩形成zip文件,并调用azkaban接口进行上传。
10.进一步优化的方案中,上述方法还包括步骤:
11.从数据库表az_jobs中获取所有任务并存入集合job_list中;
12.循环集合job_list建立job_maps,所述job_maps的结构为任务k:集合list,再次重新循环job_list以获取每个任务的所有父任务,并将所有父任务存入集合list,再嵌套循环父任务集合,取得每个父任务,并针对每个父任务从job_maps中取出对应的集合,将该父任务的子任务加入该集合中,以此实现父任务下所有子任务查找;
13.自定义不重复任务集合res,并给定任务失败节点的节点名称,将该节点名称放入res中,再从job_maps中获取任务失败节点的子节点的节点名称作为参数,如果子节点不为空则将该子节点的名称写入res中,并一直递归,若为空则返回res。
14.另一方面,本发明实施例公开了一种基于azkaban的任务自动调度系统,包括:
15.数据库表配置模块,用于建立任务管理的数据库表az_jobs,所述数据库表az_jobs包含字段有:项目名称、类型、任务名称、依赖任务名称、任务执行命令;
16.job文件生成模块,用于将数据库表az_jobs表中每条记录生成一个job文件;
17.文件压缩模块,用于将生成的job文件压缩形成zip文件,并调用azkaban接口进行上传。
18.进一步优化的方案中,上述系统还包括:
19.任务读取模块,用于从数据库表az_jobs中获取所有任务并存入集合job_list中;
20.循环处理模块,用于循环集合job_list建立job_maps,所述job_maps的结构为任务k:集合list,再次重新循环job_list以获取每个任务的所有父任务,并将所有父任务存入集合list,再嵌套循环父任务集合,取得每个父任务,并针对每个父任务从job_maps中取出对应的集合,将该父任务的子任务加入该集合中,以此实现父任务下所有子任务查找;
21.任务重建模块,用于自定义不重复任务集合res,并给定任务失败节点的节点名称,将该节点名称放入res中,再从job_maps中获取任务失败节点的子节点的节点名称作为参数,如果子节点不为空则将该子节点的名称写入res中,并一直递归,若为空则返回res。
22.与现有技术相比,本发明方法或系统,通过配置化方式自动建立任务及任务依赖,解决了手动建立任务的繁琐过程,以及防止手动配置任务时容易出错的问题,可解决大量任务依赖的实际问题。另外,通过循环递归方式巧妙解决了失败任务后的重构建过程,当有任务失败时,能快速重建新的任务依赖关系并执行。
附图说明
23.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
24.图1为现有技术中基于azkaban的任务自动调度方法的流程图。
25.图2为本发明实施例中基于azkaban的任务自动调度方法的流程图。
26.图3为实施例中基于azkaban的任务管理步骤的流程图。
27.图4为实施例中基于azkaban的失败任务依赖重建步骤的流程图。
28.图5为实施例中举例的任务依赖关系图。
29.图6为实施例中基于azkaban的任务自动调度系统的组成框图。
具体实施方式
30.下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
31.请参阅图2,本实施例提供的基于azkaban的任务自动调度方法主要包括两部分,一部分为基于azkaban的任务管理,另一部分为基于azkaban的失败任务依赖重建。
32.如图3所示,基于azkaban的任务管理流程包括以下步骤:
33.s10,建立任务管理的数据库表az_jobs,数据库表az_jobs主要包含字段有:项目名称、类型、任务名称、依赖任务名称、任务执行命令等信息。数据库表az_jobs表中的每条记录代表一个要执行的任务。
34.s20,数据库表az_jobs表中每条记录生成一个job文件。
35.本实施例中,job文件的具体生成方式为:通过程序读取az_jobs表中所有记录,针对每条记录,形成任务名称、执行命令、任务依赖、任务类型的键值对集合,并写入azkaban要求格式的job文件。即针对于az_jobs表中的每一条记录,获得其全部内容,形成任务名称、执行命令、任务依赖、任务类型的键值对集合,一条记录处理完成之后再读取下一条记录。
36.作为举例,job文件格式如:
37.type=command
38.command=sh xxx.sh alipay
39.dependencies=hsh-sftp
40.s30,将步骤s20生成的job文件压缩形成zip文件,并调用azkaban接口进行上传,上传完成后即完成主任务自动化管理。
41.上述方案中,通过配置化方式自动建立任务及任务依赖,解决了手动建立任务的繁琐过程,以及防止手动配置任务时容易出错的问题,可解决大量任务依赖的实际问题。
42.在整个任务链路中如果某一个任务失败需要重新执行此任务以及其子任务时,则启用基于azkaban的失败任务依赖重建流程,可以快速定位该失败任务的依赖关系。如图4和图5所示,假设任务c失败需要重新执行c、e、f这三个任务,本方法实现了传入c任务名称即可自动生成新的依赖任务。
43.具体地,如图4所示,首先从az_jobs表中获取所有任务并存入集合,此集合记为job_list[a,b,c,d,e,f],循环此job_list建立k(任务):v(空list)字典结构,记为job_maps,例如:{a:[],b:[],c:[],d:[],e:[],f:[]}。再次重新循环此job_list以获取每个任务的所有父任务,并将所有父任务存入集合。例如针对任务e,可获得:e-》[b,c]。再嵌套循环父任务集合[b,c],取得每个父任务,例如b,并从job_maps中取出对应的集合,将任务e加入集合,以此实现父任务下所有子任务查找,循环完成后形成最终job_maps为:{a:[b,c,d],c:[e],e:[f]}结构的数据。
[0044]
然后自定义不重复任务集合res(最开始为空集合),并给定任务失败的节点c(节点名称),将c任务放入res中,再从job_maps中获取c的子节点的节点名称作为参数,如果子节点不为空则一直递归,若为空则返回最终的res。例如,c任务下有子节点e,则将子节点e放入res中,得到res数据为[c,e],然后再进行递归,e任务下有子节点f,则得到res数据为[c,e,f],然后再进行递归,f任务下没有子节点,即子节点为空,此时则返回res,即最终res数据为[c,e,f],即为任务c失败时需要重新建立的任务依赖。
[0045]
上述方案中,通过循环递归方式巧妙解决了失败任务后的重构建过程,当某一任务失败后,可以快速自动地重新建立任务依赖关系。
[0046]
基于相同的发明构思,本发明实施例同时提供了一种基于azkaban的任务自动调度系统。如图6所示,该系统包括以下从功能角度划分的组成模块:
[0047]
数据库表配置模块,用于建立任务管理的数据库表az_jobs,所述数据库表az_jobs包含字段有:项目名称、类型、任务名称、依赖任务名称、任务执行命令;
[0048]
job文件生成模块,用于将数据库表az_jobs表中每条记录生成一个job文件;
[0049]
文件压缩模块,用于将生成的job文件压缩形成zip文件,并调用azkaban接口进行上传;
[0050]
任务读取模块,用于从数据库表az_jobs中获取所有任务并存入集合job_list中;
[0051]
循环处理模块,用于循环集合job_list建立job_maps,所述job_maps的结构为任务k:集合list,再次重新循环job_list以获取每个任务的所有父任务,并将所有父任务存入集合list,再嵌套循环父任务集合,取得每个父任务,并针对每个父任务从job_maps中取出对应的集合,将该父任务的子任务加入该集合中,以此实现父任务下所有子任务查找;
[0052]
任务重建模块,用于自定义不重复任务集合res,并给定任务失败节点的节点名称,将该节点名称放入res中,再从job_maps中获取任务失败节点的子节点的节点名称作为参数,如果子节点不为空则将该子节点的名称写入res中,并一直递归,若为空则返回res。
[0053]
其中,数据库表配置模块、job文件生成模块、文件压缩模块是任务管理所必备的模块,通过这些模块可以实现azkaban任务的自动管理与建立。其中,任务读取模块、循环处理模块和任务重建模块是在有任务失败时才启用的,通过这些模块可以快速重建新的任务依赖。
[0054]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1