一种任务调度方法、装置及存储介质与流程

文档序号:25047449发布日期:2021-05-14 12:38阅读:100来源:国知局
一种任务调度方法、装置及存储介质与流程

1.本说明书实施例涉及大数据处理技术领域,特别涉及一种任务调度方法、装置及存储介质。


背景技术:

2.随着社会高速发展,数据越来越多,利用数据却越来越困难。大数据平台以数据仓库、数据湖或其它数据源为基础,通过etl调度系统将这些异构分散的数据进行加工处理,形成有用的有价值的数据或知识,为用户或经营管理人员进行分析决策提供支撑。
3.为便于用户或经营管理人员使用大数据平台进行快速分析和决策,大数据平台支持分析师部署自定义任务,并通过任务解析模块自动判断出所依赖的上游任务(数据仓库、数据湖或其它数据源的原始加工处理任务)。etl调度系统支持在相应上游任务的对应批次处理完毕后即时触发分析师部署的自定义任务,赋能快速分析和决策。同时,大数据平台支持分析师为自定义配置任务制定执行先后依赖关系,为复杂的加工处理流程提供支撑。
4.etl调度按照功能复杂度可分为简单定时调度和工作流调度两种:
5.1、定时调度对etl任务在每个周期按某个固定时间重复运行,如在每月的第一天凌晨3点进行上月的数据统计和汇总。定时调度无法处理多个etl任务间具有依赖关系的情形。
6.2、工作流调度则在etl任务间建立依赖关系,并严格按照既定的依赖关系逐个执行etl任务。如此,即可支持将复杂的数据处理流程拆分成多个etl任务分步完成。工作流调度更适合数据量庞大、处理逻辑复杂的情况。
7.定时调度无法满足复杂加工处理流程的需求,故目前的etl调度系统普通采用工作流调度。但工作流调度需要检查依赖任务是否运行完成,从而触发任务的调度执行。随着大数据平台的普及,分析师所部署的自定义任务越来越多,也越来越复杂。复杂体现在:分析师所部署的自定义任务依赖的上游任务越来越多,自定义任务间的依赖关系越来越复杂。工作流调度所需要的依赖任务检查项越来越多。这对于etl调度系统的处理性能、调度触发的即时性形成了一定的挑战,逐渐产生etl调度系统负载高、调度触发不及时等问题,不利于分析师使用大数据平台进行快速分析和决策。


技术实现要素:

8.本说明书实施例的目的是提供一种任务调度方法、装置及存储介质,以解决现有技术中etl调度系统负载高、调度触发不及时等问题,提高任务调度的效率。
9.为解决上述问题,本说明书实施例提供一种任务调度方法,所述方法包括:获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述
多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
10.为解决上述问题,本说明书实施例还提供一种任务调度装置,所述装置包括:获取模块,用于获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;解析模块,用于对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;处理模块,用于对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;调度模块,用于在处理成功的情况下,根据所述处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
11.为解决上述问题,本说明书实施例还提供一种电子设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序以实现:获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
12.为解决上述问题,本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现:获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
13.由以上本说明书实施例提供的技术方案可见,本说明书实施例中,可以获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。本说明书实施例提供的方法,解除自定义任务的重复的上游任务依赖关系,使得自定义任务的上游任务依赖关系更简单、清晰,从而使得etl调度系统在调度时可以简化触发条件的判断,降低etl调度系统的负载,同时也降低了调度系统所需的存储空间,从而提高任务调度的效率。
附图说明
14.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
15.图1为本说明书一个场景示例中用户进行快速分析和决策的大数据平台的系统结构图;
16.图2为本说明书一个场景示例中etl调度系统的结构示意图;
17.图3为本说明书实施例一种任务调度方法的流程图;
18.图4为本说明书一个场景示例中任务解析模块的工作流程图;
19.图5为本说明书一个场景示例中处理模块的工作流程图;
20.图6为本说明书实施例处理后的效果示意图;
21.图7为本说明书实施例处理的细化流程示意图;
22.图8为本说明书实施例一种电子设备的功能结构示意图;
23.图9为本说明书实施例一种任务调度装置的功能结构示意图。
具体实施方式
24.下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
25.在一些复杂的场景下,处理数据的时候往往都是分成好几个任务步骤来完成一个数据处理流程。多个任务单元之间往往有着强依赖关系,上游任务执行并成功,下游任务才可以执行。比如上游任务结束后拿到a结果,下游任务需结合a结果才能产出b结果,因此下游任务的开始一定是在上游任务成功运行拿到结果之后才可以开始。而为了保证数据处理结果的准确性,就必须要求这些任务按照上下游依赖关系有序、高效的执行。etl(extract

transform

load)调度系统就是这样可以组织任务前后依赖关系,让任务有序执行的关键系统。
26.目前的etl调度系统普通采用工作流调度。但工作流调度需要检查依赖任务是否运行完成,从而触发任务的调度执行。随着大数据平台的普及,分析师所部署的自定义任务越来越多,也越来越复杂。复杂体现在:分析师所部署的自定义任务依赖的上游任务越来越多,自定义任务间的依赖关系越来越复杂。工作流调度所需要的依赖任务检查项越来越多。这对于etl调度系统的处理性能、调度触发的即时性形成了一定的挑战,逐渐产生etl调度系统负载高、调度触发不及时等问题,不利于分析师使用大数据平台进行快速分析和决策。
27.考虑到如果对多个自定义任务的依赖关系进行有关,解除重复的依赖关系,使得自定义任务的上游任务依赖关系更简单、清晰,则有望解决现有技术中etl调度系统负载高、调度触发不及时等问题,提高任务调度的效率。基于此,本说明书实施例提供一种任务调度方法、装置及存储介质。
28.请参阅图1,介绍本说明书一个场景示例。图1为所述场景示例中用户进行快速分
析和决策的大数据平台的系统结构图。包括:etl调度系统1,数据仓库2,数据集市3,即时bi系统4。
29.在本场景示例中,所述etl调度系统1可以所述任务调度方法的执行主体,支持使用自定义部署的任务将数据从源端经过抽取、转换、加载到目的端,从而将加工处理后的数据供用户进行分析和决策。
30.在本场景示例中,所述数据仓库2存储了企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。这里是etl调度系统抽取、转换、加载数据的源端。除数据仓库外,etl调度系统亦可使用数据湖或其它数据源作为抽取、转换、加载数据的源端。
31.在本场景示例中,所述数据集市3存储了为满足特定部门或用户的需求,面向决策分析需求的数据立方体。这里是etl调度系统抽取、转换、加载数据的目的端,存放了加工处理后的数据,供用户进行分析和决策。除数据集市外,etl调度系统亦可使用其它存储系统作为抽取、转换、加载数据的目的端。
32.在本场景示例中,所述即时bi系统4是用户使用大数据平台的入口,提供了包括部署自定义任务的操作界面、查看自定义任务运行状态、查询处理加工后的数据、使用图表展示分析处理加工后的数据等功能。除即时bi系统外,其它系统或装置亦可作为使用etl调度系统的入口。
33.如图1所示,在本场景示例中,用户进行快速分析和决策的步骤如下。
34.步骤1:用户通过即时bi系统4提供的界面部署自定义任务,由即时bi系统4将部署的自定义任务和自定义任务之间的依赖关系传输到etl调度系统1。
35.其中,所述自定义任务是由用户部署的数据分析处理加工任务,包含抽取、转换、加载等过程,目的是为了进行数据分析或数据统计(这种数据分析或数据统计任务往往是临时的,或者由用户根据需要进行灵活变更)。使用自定义任务的名称是为了和开发人员或技术人员通过发版部署的系统任务进行区分。自定义任务以统计分析为主,包括日报、周报、月报的数据统计,数据质量类、异常检测类的数据分析等。自定义任务的具体形式以sql脚本为主。这里给出一个简单的自定义任务(记为自定义任务a):
36.insert into usr.order_price_day_stat
37.select'${process_date}',cast(sum(order_price)as decimal(30,2))
38.from org.emall_b2c_order_info
39.where to_date(order_time)='${process_date}';
40.自定义任务a只有一条sql语句,作用是为了统计某日的订单总金额,其中,${process_date}是任务的参数(日期),usr.order_price_day_stat是数据集市3中的一张表,存放统计数据(结果数据),org.emall_b2c_order_info是数据仓库2中的一张表,是订单的详细数据(源数据),to_date是将时间转换为日期的函数,sum是求和,cast是格式转换。
41.步骤2:etl调度系统1解析自定义任务的上游任务依赖关系,并优化依赖的上游任务,并定时获取依赖的上游任务的运行状态。
42.由于自定义任务是对数据仓库2(源端)的数据进行处理加工,将处理后的数据存入数据集市3,而源端数据的产生对应着原始的数据加工任务(通常为上述系统任务),这些任务负责将业务系统产生的原始数据存入数据仓库2,并可能进行一定的数据过滤或数据
清洗,这些原始的数据加工任务即是自定义任务所依赖的上游任务。获取上游任务依赖关系的主要步骤是先进行sql脚本解析,获取sql脚本使用到的源表,并查询表和原始数据加工任务的对应关系,从而得到上游任务依赖关系。以上述自定义任务a为例,自定义任务a使用了数据仓库2中的表org.emall_b2c_order_info,该表存放了电子商城系统产生的订单数据,由上游任务b(上游任务b即系统任务,由开发人员或技术人员开发并部署)负责将业务系统产生的订单数据按日存入表org.emall_b2c_order_info,则上游任务b是自定义任务a的上游任务,上游任务b某日的订单数据加载完毕后才能调度自定义任务a,统计该日的订单总金额。
43.步骤3:etl调度系统1根据上游任务的运行状态,按序调度并在数据仓库3执行自定义任务的脚本。
44.如图2所示,所述etl调度系统1可以包括部署自定义任务模块11,任务解析模块12,处理模块13,上游任务监控模块14,etl调度模块15,调度监控模块16。通过各个模块的数据处理,从而实现解析自定义任务的上游任务依赖关系,并优化依赖的上游任务,并定时获取依赖的上游任务的运行状态,以及根据上游任务的运行状态,按序调度并在数据仓库3执行自定义任务的脚本。
45.步骤4:传输自定义任务加工后的数据至数据集市3。
46.步骤5:用户通过即时bi系统4查询自定义任务的运行状态。
47.etl调度系统1可以监控自定义任务的运行状态,并向即时bi系统4提供接口以查询自定义任务的运行状态。即时bi系统4通常为b/s架构的系统,用户可通过浏览器访问即时bi系统4,并在浏览器界面上进行部署自定义任务、查询自定义任务的运行状态、以图表的形式展现自定义任务加工后的结果数据等功能的操作。以上述自定义任务a为例,用户通过浏览器访问即时bi系统4,通过查询自定义任务运行状态的功能,获取自定义任务a每日的任务运行情况和最新的处理日期,并可以表格或折线图的形式展现每日的订单总金额。
48.步骤6:用户通过即时bi系统4获取加工后的数据并进行分析展现。
49.请参阅图3。本说明书实施例提供一种任务调度方法。在本说明书实施例中,执行所述任务调度方法的主体可以是具有逻辑运算功能的电子设备,所述电子设备可以是服务器。所述服务器可以是具有一定运算处理能力的电子设备。其可以具有网络通信单元、处理器和存储器等。当然,所述服务器并不限于上述具有一定实体的电子设备,其还可以为运行于上述电子设备中的软体。所述服务器还可以为分布式服务器,可以是具有多个处理器、存储器、网络通信模块等协同运作的系统。或者,服务器还可以为若干服务器形成的服务器集群。所述方法可以包括以下步骤。
50.s310:获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容。
51.以上述场景示例为例对获取具有依赖关系的多个自定义任务的过程进行说明。用户可以通过即时bi系统4提供的界面部署自定义任务,由即时bi系统4将部署的自定义任务和自定义任务之间的依赖关系传输到etl调度系统1。
52.所述etl调度系统1的部署自定义任务模块11可以接收用户部署的自定义任务,并将所述自定义任务的脚本内容和依赖关系放入数据库存储,以便于从数据库中获取具有依赖关系的多个自定义任务。
53.s320:对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务。
54.在一些实施例中,所述对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务包括:解析自定义任务的脚本内容中的sql语句用到的表名;根据所述表名获取所述自定义任务对应的上游任务。具体的,获取各个自定义任务依赖的上游任务的主要步骤是先进行sql脚本解析,获取sql脚本使用到的源表,并查询表和原始数据加工任务的对应关系,从而得到上游任务依赖关系。以上述自定义任务a为例,自定义任务a使用了数据仓库2中的表org.emall_b2c_order_info,该表存放了电子商城系统产生的订单数据,由上游任务b(上游任务b即系统任务,由开发人员或技术人员开发并部署)负责将业务系统产生的订单数据按日存入表org.emall_b2c_order_info,则上游任务b是自定义任务a的上游任务,上游任务b某日的订单数据加载完毕后才能调度自定义任务a,统计该日的订单总金额。通过上述方式,能够准确地得到各个自定义任务依赖的上游任务,提高各个自定义任务依赖的上游任务的获取效率。
55.以上述场景示例为例对得到各个自定义任务依赖的上游任务的过程进行说明。通过所述etl调度系统1的任务解析模块12实现对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务。如图4所示,可以包括以下步骤。
56.步骤1201:接受某个自定义任务的sql脚本作为输入参数。
57.具体的,可以接受自定义任务模块11接收的新增自定义任务的脚本内容作为输入。
58.步骤1202:解析sql语句中使用到的表。
59.具体的,可以解析脚本中所有sql语句用到的表名。
60.步骤1203:根据表名获取对应的上游任务。
61.具体的,可以根据解析出的表名获取对应的上游任务。
62.步骤1204:保存该自定义任务和它的上游任务依赖关系。
63.具体的,可以将解析出的该自定义任务和它的上游任务依赖关系放入数据库存储。
64.s330:对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务。
65.在一些实施例中,所述上游自定义任务与下游自定义任务具有直接或间接的依赖关系,即上游自定义任务为下游自定义任务所依赖的自定义任务,或上游自定义任务为下游自定义任务所依赖的自定义任务依赖的自定义任务。
66.在一些实施例中,所述对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系可以包括:获取各个自定义任务依赖的上游任务,分别比较各个自定义任务中,上游自定义任务与下游自定义任务依赖的上游任务,若存在依赖重复的上游任务,则可以将该重复的上游任务确定为目标上游任务,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系。
67.在一些实施例中,还可以使用图论来实现处理过程。具体的,所述对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任
务的依赖关系还可以包括:根据多个自定义任务建立有向图;其中,所述有向图中的顶点表示自定义任务,边表示依赖关系;标记所述多个自定义任务为未处理,使未处理的自定义任务的隐含上游依赖集合为空;所述隐含上游依赖集合由隐含上游任务组成;所述隐含上游任务为自定义任务依赖的父自定义任务所依赖的上游任务;将目标自定义任务的至少一个父自定义任务的隐含上游依赖集合取并集,得到所述目标自定义任务的隐含上游依赖集合;所述目标自定义任务为未处理且入度为0的自定义任务;将所述目标自定义任务依赖的上游任务中与所述目标自定义任务的隐含上游依赖集合中相同的任务确定为目标上游任务,解除所述目标自定义任务与所述目标上游任务的依赖关系;将所述目标自定义任务依赖的上游任务加入所述目标自定义任务的隐含上游依赖集合中,标记所述目标自定义任务为已处理,并从所述有向图中删除与所述目标自定义任务关联的边,重新计算各个未处理的自定义任务的入度以便于确定新的目标自定义任务,直至所有自定义任务都已处理。其中,所述入度是图论算法中重要的概念之一,它通常指有向图中某顶点作为图中边的终点的次数之和。
68.通过上述处理方式,能够解除自定义任务的重复的上游任务依赖关系,使得自定义任务的上游任务依赖关系更简单、清晰,从而使得任务在调度时可以简化触发条件的判断,降低etl调度系统的负载,同时也降低了调度系统所需的存储空间。
69.在一些实施例中,在处理过程中,在不存在入度为0的未处理自定义任务的情况下,确定所述有向图有环,判定处理失败。具体的,在不存在入度为0的未处理自定义任务的情况下,可以确定每个自定义任务都依赖其他自定义任务,各个自定义任务之间的依赖关系形成一个闭环,使得不能确定各个自定义任务的执行顺序,从而导致各个自定义任务执行异常。通过上述处理方式,还可以及时发现有环的情况,提高任务调度的异常处理效率。
70.以上述场景示例为例对处理的过程进行说明。通过所述etl调度系统1的处理模块13实现对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系。如图5所示,可以包括以下步骤。
71.步骤1301:接受某个自定义任务作为输入参数。
72.具体的,可以接受经任务解析模块12处理的自定义任务作为输入。
73.步骤1302:获取该任务相关的所有自定义任务和它们的依赖关系及依赖的上游任务。
74.具体的,可以获取和该自定义任务具有依赖关系的所有自定义任务,和这些任务的上游任务依赖关系。
75.步骤1303:对这一组具有依赖关系的自定义任务进行处理。
76.步骤1304:判断步骤1303的处理是否成功,若是则执行步骤1305,若否则执行执行1306。
77.步骤1305:保存处理后的上游任务依赖情况。
78.具体的,可以将处理后的上游任务依赖关系放入数据库保存。
79.步骤1306:停用这一组具有依赖关系的自定义任务,并通知用户依赖关系异常。
80.图6为处理后的效果示意图。如图6所示,自定义任务1、自定义任务2、自定义任务3分别依赖了若干上游任务,由于自定义任务1、自定义任务2、自定义任务3是执行相关的任务,自定义任务1、自定义任务2、自定义任务3有很大概率会依赖相同的上游任务,如自定义
任务1和自定义任务2依赖了相同的上游任务2,由于自定义任务2必须在自定义任务1之后调度执行,所以自定义任务2调度执行时,自定义任务1的上游任务必然已经执行完毕,故可以将自定义任务2依赖上游任务2的这一条依赖关系解除,而不影响调度执行的顺序。
81.图7为步骤1303处理的细化流程示意图。处理基于图论,可同时检查出图中有环的异常情况。在本场景示例中,可在进行依赖优化的同时检查图中是否有环。步骤1303细化的具体步骤如下。
82.步骤130301:对这些自定义任务及其依赖关系建立一张有向图g,任务用顶点(v)表示,依赖关系用边(e)表示。
83.步骤130302:计算所有顶点的入度(即统计每个自定义任务依赖的父自定义任务的个数)。
84.步骤130303:标记所有自定义任务为未处理,对每个任务,置它的隐含上游依赖集合为空。
85.步骤130304:判断所有自定义任务是否都已处理。若是,则步骤1303正常结束,处理成功。若否,则执行步骤130305。
86.步骤130305:判断是否存在入度为0的未处理任务。若是,则执行步骤130306。若否,则说明图中有环,属于异常情况,处理失败。
87.步骤130306:取一个未处理的入度为0的自定义任务,在之后的步骤称该任务为“任务j”88.步骤130307:将任务j的父自定义任务的隐含上游依赖集合取并集,设为任务j的隐含上游依赖集合。
89.步骤130308:对任务j依赖的上游任务,去除隐含上游依赖集合中的任务。
90.步骤130309:将任务j依赖的上游任务加入任务j的隐含上游依赖集合中。
91.步骤130310:标记任务j为已处理。
92.步骤130311:从g中删去任务j关联的边,重新计算子任务的入度,执行步骤130304。
93.其中,所述隐含上游依赖集合可以由隐含上游任务组成;所述隐含上游任务为自定义任务依赖的父自定义任务所依赖的上游任务。具体的,自定义任务除自身所依赖的上游任务,还由于自定义任务依赖了其它自定义任务,而这些其它自定义任务也有依赖的上游任务,所有这些其它自定义任务所依赖的上游任务就称为隐含上游任务。
94.步骤1303的详细步骤中所述的隐含上游依赖集合是步骤1303处理过程中的辅助数据结构,其初始为空(步骤130303),之后按广度优先遍历的方式分别将父自定义任务的隐含上游依赖集合取并集(步骤130307)、处理(步骤130308)、将自身的上游依赖任务加入隐含上游依赖集合便于子自定义任务的处理(步骤130309)。在步骤1303处理完毕后,隐含上游依赖集合则不再需要存在。为便于说明,以图5为例,自定义任务1的隐含上游依赖为空,自定义任务2的隐含上游依赖也为空,因为自定义任务1和自定义任务2没有依赖的父自定义任务,在步骤130307的处理中,相当于没有优化,然后在步骤130308分别将自身的上游任务加入隐含上游依赖集合,在自定义任务3的处理中将自定义任务1和自定义任务2的隐含上游依赖集合取并集得到自定义任务3的隐含上游依赖。这里进一步给出步骤1303中隐含上游依赖集合的变化:
95.设自定义任务1、自定义任务2、自定义任务3的隐含上游依赖集合分别用s1、s2、s3表示,s1、s2、s3初始都为空集(步骤130303)
96.处理自定义任务1:
97.步骤130307,由于没有父自定义任务,s1仍为空;
98.步骤130308处理,由于s1为空,这一步相当于空操作;
99.步骤130309,s1={上游任务1,上游任务2}。
100.处理自定义任务2:
101.步骤130307,由于没有父自定义任务,s2仍为空;
102.步骤130308处理,由于s2为空,这一步相当于空操作;
103.步骤130309,s1={上游任务4,上游任务5,上游任务6}。
104.处理自定义任务3:
105.步骤130307取父自定义任务s1、s2的并集,s3={上游任务1

2,上游任务4

6};
106.步骤130308处理,自定义任务3依赖的上游任务2和上游任务4

6被减去,仅留下上游任务3;
107.步骤130309,s3={上游任务1

6}。
108.在一些实施例中,所述方法还可以包括:在处理失败的情况下,停用所述多个自定义任务,返回依赖关系异常的通知。具体的,在不存在入度为0的未处理自定义任务的情况下,确定所述有向图有环,判定处理失败,在处理失败的情况下,通过停用所述多个自定义任务,返回依赖关系异常的通知,能够及时释放etl调度系统的内存,降低etl调度系统的负载,以及及时反馈任务调度的异常情况,有利于用户对异常情况进行排查。
109.s340:在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
110.在一些实施例中,所述根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度包括:定时获取处理后的各个自定义任务依赖的上游任务的运行状态;根据所述各个上游任务的运行状态和多个自定义任务之间的依赖关系按序触发并执行自定义任务。上述方式,通过处理简化了子自定义任务调度的触发条件,使得子自定义任务在父自定义任务运行结束后能及时触发,从而解决调度触发不及时的问题,优化任务调度的时效性。
111.在一些实施例中,所述方法还可以包括:监控所述自定义任务的运行状态,以便于反馈所述自定义任务的运行状态。通过对自定义任务的运行状态的监控,能够反馈自定义任务的运行状态,使得任务调度的顺利执行,并能够通知用户各个自定义任务的执行情况。
112.以上述场景示例为例对所述多个自定义任务进行调度和所述自定义任务的运行状态的监控过程进行说明。
113.通过所述etl调度系统1的上游任务监控模块14和etl调度模块15实现根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。具体的,所述上游任务监控模块14负责定时获取上游任务的运行状态,供etl调度模块15触发自定义任务的运行。所述etl调度模块15根据上游任务监控模块14提供的上游任务的运行状态、自定义任务之间的依赖关系和自定义任务依赖上游任务的关系,按序触发并执行自定义任务。
114.通过所述etl调度系统1的调度监控模块16实现监控所述自定义任务的运行状态,
以便于反馈所述自定义任务的运行状态。具体的,所述调度监控模块16负责监控etl调度模块15触发的自定义作业的运行状态,并向其它系统提供自定义作业的运行状态。
115.本说明书实施例提供的方法,可以获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。本说明书实施例提供的方法,解除自定义任务的重复的上游任务依赖关系,使得自定义任务的上游任务依赖关系更简单、清晰,从而使得etl调度系统在调度时可以简化触发条件的判断,降低etl调度系统的负载,同时也降低了调度系统所需的存储空间,从而提高任务调度的效率。
116.图8为本说明书实施例一种电子设备的功能结构示意图,所述电子设备可以包括存储器和处理器。
117.在一些实施例中,所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现任务调度方法的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据用户终端的使用所创建的数据。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘、智能存储卡(smart media card,smc)、安全数字(secure digital,sd)卡、闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
118.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述处理器可以执行所述计算机指令实现以下步骤:获取具有依赖关系的多个自定义任务;所述自定义任务为用户部署的任务;所述自定义任务包括执行任务的脚本内容;对所述脚本内容进行解析,得到各个自定义任务依赖的上游任务;所述上游任务为系统任务;对各个自定义任务依赖的上游任务进行处理,解除所述多个自定义任务中的下游自定义任务与目标上游任务的依赖关系;其中,所述目标上游任务为所述多个自定义任务中上游自定义任务与下游自定义任务重复依赖的上游任务;在处理成功的情况下,根据处理后的各个自定义任务依赖的上游任务对所述多个自定义任务进行调度。
119.在本说明书实施例中,该电子设备具体实现的功能和效果,可以与其它实施例对照解释,在此不再赘述。
120.图9为本说明书实施例一种任务调度装置的功能结构示意图,该装置具体可以包括以下的结构模块。
121.获取模块910,用于获取具有依赖关系的多个自定义任务;所述自定义任务为用户
array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very

high

speed integrated circuit hardware description language)与verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
131.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
132.通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。
133.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
134.本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
135.本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
136.虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本
说明书的精神。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1