分布式系统的作业调度系统及方法与流程

文档序号:11216059阅读:443来源:国知局
分布式系统的作业调度系统及方法与流程
本发明涉及作业调度
技术领域
,特别涉及一种分布式系统的作业调度系统及方法。
背景技术
:近年来,随着信息技术和互联网的发展,全球的数据总量已经达5000亿gb,增长速度甚至高过nasa火箭速度,人们迅速从信息匮乏的时代走入了信息过载的时代。在这个时代主要挑战是:如何从大量信息中提取感兴趣的信息,然后应用于分析、决策等方面。从数据的采集、抽取、转换、加载、数据集市生成,再到决策的数据魔方的形成,涉及成千上万的处理程序,而处理程序之间的关系又是千丝万缕、错综复杂,把其形容成一张作业的蜘蛛网也不为过。如何有效地实施作业调度管理,提高系统数据分析效率和整体资源利用率,是大数据分析中重中之重。然而,作业调度管理常常存在以下问题:1.需要人工梳理和分析作业间的关联关系,然后配置相关作业的调度顺序。2.功能单一,仅实现最简单的作业调度功能,未能对调度作业进行合理分析,合理配置作业执行路径。3.缺乏对于历史作业运行经验的自学习自反馈能力,无法按历史运行经验关键作业进行并发度和资源的倾斜。4.数据源长途跋涉,经过大量的处理和组件传递后呈现在业务用户面前,对数据进行回溯其实很难。而源数据回溯在有效决策、策略制定、差异分析等过程中很重要。技术实现要素:本发明实施例提供了一种分布式系统的作业调度系统,用以自动配置作业执行路径,实现资源的合理分配,可溯源,提高作业调度时效,该系统包括:作业提取装置,用于提取分布式文件系统中的多个待调度作业;血缘分析装置,用于对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系;所述血缘关系为多个待调度作业之间的从数据源到目标数据的流向关系;;全作业路径构建装置,用于根据所述血缘关系,构建多个待调度作业之间的所有作业执行路径;关键路径识别装置,用于根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径;关键作业执行路径为执行待调度作业时历史运行时间大于预设运行时间的路径;作业分组装置,用于对所有作业执行路径进行拆分分组,得到分组后的作业执行路径;作业执行装置,用于根据所述关键作业执行路径和分组后的作业执行路径,对待调度作业进行调度执行。本发明实施例还提供了一种分布式系统的作业调度方法,用以自动配置作业的执行路径,实现资源的合理分配,可溯源,提高作业调度时效,该方法包括:提取分布式文件系统中的多个待调度作业;对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系;所述血缘关系为多个待调度作业之间的从数据源到目标数据的流向关系;;根据所述血缘关系,构建多个待调度作业之间的所有作业执行路径;根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径;关键作业执行路径为执行待调度作业时历史运行时间大于预设运行时间的路径;对所有作业执行路径进行拆分分组,得到分组后的作业执行路径;根据所述关键作业执行路径和分组后的作业执行路径,对待调度作业进行调度执行。与现有技术中人工配置作业的执行路径、作业资源分配不均匀,无法对数据进行回溯和调度时效低的技术方案相比较,本发明实施例具有如下优点:首先,通过对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系,根据血缘关系,构建多个待调度作业之间的所有作业执行路径,实现了作业执行路径的自动配置,可根据多个待调度作业之间的血缘关系找到数据源;其次,根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径,对调度作业进行合理分析,合理配置作业执行路径,在实际调度时,对于关键路径动态分配更多的并发度和计算资源,确保关键路径作业能尽快完成,以达到整个批量的运行时间最快最优,提高整个调度作业的时效,同时根据历史作业运行经验的自学习自反馈能力,实现了资源合理分配;最后,通过对所有作业执行路径进行拆分分组,降低作业间的依赖复杂度和耦合度,提高了海量作业的调度时效。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:图1是本发明实施例中分布式系统的作业调度系统的结构示意图;图2是本发明实施例中根据血缘关系构建的所有待调度作业的aoe图;图3是本发明实施例中分布式系统的作业调度方法的流程示意图;图4是本发明又一实施例中分布式系统的作业调度方法的流程示意图;图5是本发明实施例中血缘关系分析的流程示意图;图6是本发明实施例中建的所有待调度作业的aoe图的流程示意图;图7是本发明实施例中作业调度控制策略库示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。为了提高海量作业的读取速度和分析的并发能力,本发明实施例中的系统将采用分布式系统进行部署,以分布式文件系统共享机制为基础,充分利用分布式集群spark计算能力,克服了传统复杂机器学习训练速度较慢的问题,实现快速遍历迭代递归的分析作业中层层模块形成作业的分组、相关、依赖、串并、互斥、循环、优先级、并发、时间计划等多种作业调度控制策略。首先,对本发明实施例所涉及到的术语进行说明如下:作业相关:指的是作业间不同批量日期的内容有依赖关系,如2号账务余额的批量更新必须要等1号的该文件批量和使用者完成后再更新。作业依赖:指的是同一批量的作业间执行的前后关系,必须等待被依赖的作业执行完毕后,再执行该作业。例如:中间表和结果表,结果分析需要使用到中间表的数据,那这样结果分析和中间分析需要建立依赖关系,中间分析执行完毕后结果分析执行。血缘关系:指的是数据的计算存储传播需要追溯结果来源和相关的数据流向。aoe网(图):是一个带权的有向无环图。网中只有一个入度为零的点(称为源点)和一个出度为零的点(称为汇点)。其中,顶点表示事件(event),弧表示活动,权表示活动持续的时间。通常,aoe网可用来估算工程的完成时间。hdfs:是一个开源的hadoop生态体系中的分布式文件系统。如图1所示,本发明实施例中分布式系统的作业调度系统包括四个组成部分:第一部分为作业提取装置1,主要实现海量作业的提取及共享,该装置与海量作业脚本共同部署于hdfs分布式文件系统;第二部分包括血缘分析装置2、全作业路径构建装置3、关键路径识别装置4、作业分组装置5,共同部署于hadoop应用平台,主要实现作业分析;第三部分为作业执行装置6,采用多进程部署,主要实现作业的运行及记录运行相关数据;第四部分为作业控制策略库7,作业控制策略库7是一个数据库,用于存储作业的基本信息等数据。下面对该分布式系统的作业调度系统进行详细说明。图1是本发明实施例中分布式系统的作业调度系统的结构示意图,如图1所示,该系统包括:作业提取装置1,用于提取分布式文件系统中的多个待调度作业;血缘分析装置2,用于对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系;所述血缘关系为多个待调度作业之间的从数据源到目标数据的流向关系;全作业路径构建装置3,用于根据所述血缘关系,构建多个待调度作业之间的所有作业执行路径;关键路径识别装置4,用于根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径;所述关键作业执行路径为执行待调度作业时历史运行时间大于预设运行时间的路径;作业分组装置5,用于对所有作业执行路径进行拆分分组,得到分组后的作业执行路径;作业执行装置6,用于根据所述关键作业执行路径和分组后的作业执行路径,对待调度作业进行调度执行。具体实施时,作业提取装置1遍历读取指定目录下所有的作业脚本信息,并将符合一定规则(该规则一般使用正则表达式描述)的作业脚本提取后写入分布式文件中,同时输入到血缘分析装置2中。同时,hdfs分布式文件系统对整个作业调度系统透明,所存放的海量作业以共享脚本的形式,将作业实际内容提供给每一个调度的执行者作业执行装置6,成为了分布式调度系统的基础。在一个实施例中,所述血缘分析装置具体用于:识别每个待调度作业业务逻辑的数据源信息和数据目标信息,将数据源信息中的源表和源字段与数据目标信息中的目标表和目标字段关联,形成每个待调度作业信息项的源信息到目标信息的血缘关系;将每个待调度作业源信息到目标信息的血缘关系进行整合,形成整个调度系统的整体全面的血缘关系。具体实施时,血缘分析装置2负责分析作业的血缘关系,该装置首先识别作业业务逻辑的源信息和目标信息,包括源表、源字段、目标表、目标字段等,并形成源和目标的一一对应关系,以此形成每个作业及其信息项的血缘关系,最后按作业对作业血缘关系进行去重整合,最终形成整体的作业的流转信息输入到全作业路径构建装置3。本发明实施例中血缘分析的过程使用hadoop集群的spark计算引擎,即每个作业脚本信息作为一个spark子任务的输入,利用集群进行多个spark子任务的高并发计算,在内存中反复地迭代计算,同时中间结果驻内存中不落地,最终输出为每个作业脚本需要依赖的源表源字段等血缘关系信息。在一个实施例中,所述全作业路径构建装置具体用于:根据所述血缘关系,构建所有待调度作业的aoe图;根据所述血缘关系,构建所有待调度作业的aoe图,包括:虚拟出第一点和第二点构建一个最初的aoe图,第一点是入度为零的点,所述第一点作为整个待调度作业的开始源点,第二点是出度为零的点,作为整个待调度作业的结束点;从血缘分析装置中获取第一层待调度作业,将获取的每个待调度作业都作为一个顶点加入到aoe图中,从整个待调度作业的开始源点到每个所述顶点画一条有向弧,弧的权重为零;所述第一层待调度作业为没有前序作业的作业;依次遍历aoe图中除了调度结束点之外每一个还没出度的顶点,从血缘分析装置中获取所述还没出度的顶点的后续作业,当所述后续作业在aoe图中不存在时,在aoe图中新增一个顶点作为所述后续作业的顶点,新增一条还没出度的顶点到后续作业的顶点的有向弧,将每个还没出度的顶点对应待调度作业的预估作业运行时间或历史实际运行时间作为该有向弧(还没出度的顶点到后续作业的顶点的有向弧)的权重;如果从血缘分析装置获取不到当前作业的后续作业,将整个待调度作业的调度结束点作为当前作业的目标点,当前作业到调度结束点的有向弧的权重为当前作业的预估作业运行时间或历史实际运行时间。具体实施时,全作业路径构建装置3以每个作业作为一个点,作业间的先后关系使用有向弧表示,作业运行时间作为弧的权重,以此构建一个批量作业的全路径图。首先,虚拟出2个点构建一个最初的aoe网,aoe网图的示意图如图2所示,一个是入度为零的点作为整个调度的开始源点,一个是出度为零的点作为整个调度的结束点。其次,从血缘分析装置2获取第一层的作业,所述第一层作业为没有前序作业的作业,把获取每个作业都作为一个点加入到aoe图中,从调度开始源点到每个点画一个有向弧,弧的权重为零。再者,依次遍历aoe图中除了调度结束点之外每一个还没出度的作业点,从血缘分析装置2中获取其后续作业,如果该作业是否已经在aoe图中存在,如果不存在,那就先在aoe图中新增一个作业点,否则就不新增,然后再新增一条该作业到后续作业的有向弧,将每个作业运行时间预估信息或历史作业实际的运行时间信息作为该弧的权重。如果从血缘分析装置2获取不到该作业后续作业了,那就直接使用调度结束点为该作业的目标点,弧的权重为该作业的执行时间,整个全作业路径构建装置3处理循环的终结是血缘分析装置2中的所有作业都在该作业图中存在,并且有对应的入度和出度。该装置最终形成一个aoe的作业流的全路径图给关键路径识别装置4。在一个实施例中,所述关键路径识别装置具体用于:确定aoe图中每个顶点对应待调度作业的最早发生时间和最晚发生时间;根据每个顶点对应待调度作业的最早发生时间和最晚发生时间,确定aoe图中作业执行路径的重复程度;根据所述aoe图中作业执行路径的重复程度,确定关键作业执行路径。具体实施时,关键路径识别装置4,负责识别全作业路径构建装置103输出的全作业路径图,识别对于最终时效影响最大的关键路径,所述关键路径是指优化该路径对于整个批量运行结束时间提升效率最高的路径。根据aoe网,可以看出作业的前序依赖是该作业的入度,而该作业触发的后续作业是出度,按作业的入度和出度进行分类,识别出有向图中横向没有交会的路径,如果交会路径数小于某个阀值,认为是可以独立的调度。针对与有共有交会的路径,从业务角度选择是拆分作业还是冗余部署作业,形成独立作业路径或重复的作业路径。将完全没有交会的路径形成独立的调度组,将整个调度源点和会点按组拆分,分组之后对应的信息记录。通过这种作业分组方式来识别该关键路径有助于提升批量的稳定性,提升该关键路径效率,可以直接提升整个批量的时效。在一个实施例中,确定aoe图中每个顶点对应待调度作业的最早发生时间和最晚发生时间,包括:按照如下公式计算每个待调度作业对应的最早发生时间:其中,etvk为序号为k的作业的最早发生时间,etvi为序号为i的作业的最早发生时间。p[k]为序号为k的所有前序作业的集合,len<vi,vk>为序号为i的作业的执行时间;按照如下公式计算每个顶点对应待调度作业的最晚发生时间:其中,ltvk为序号为k的作业的最晚发生时间,etvk为序号为k的作业的最早发生时间,ltvo为序号为o的作业的最晚发生时间。s[k]为序号k的作业的所有后续作业的集合,len<vk,vo>序号为k的作业执行时间。具体实施时,作业分组装置5,负责利用spark的机器学习算法进行作业聚类和图论等的机器学习进行分析并分组。具体地,该装置首先使用聚类从作业依赖和紧密度方面识别出作业之间的关系度,将关系度高的划分一个初始作业组。其次,该装置利用图论按作业的入度和出度进行分类,识别出有向图中横向没有交会的路径,获取出交汇路径的信息。然后针对于交汇路径在不同全路径上血缘关系进行分析,判断该全路径是否使用到交汇路径说含有的全部血缘信息,如果是那该交汇路径不能拆分,否则按不同的血缘内容进行交汇路径的水平拆分。具体实施时,作业执行装置6,该装置主要负责作业实际的启动、执行,并记录相关作业运行的情况信息到作业调度控制策略库3中。为了克服海量作业调度单批量服务成为调度瓶颈,提高调度服务的高可用性和高可靠性,该装置部署为多进程,这些进程可以部署在同一个服务器上也可以部署在不同的服务器上。这些进程分为两类:管理者和执行者,管理者主要是从作业调度控制策略库7获取满足执行前提条件的作业(所谓执行的前提条件是指该作业的前序作业已经执行完毕,作业的优先级和时间窗口符合该作业运行设定,并且目前还在调度组的并发度的阀值下面),交给具体的执行者执行,并且从执行者处定期获取作业运行情况并更新作业调度控制策略库3。另一方面,执行者接受管理者的指派,从hdfs上获取对应的作业,提交到指定的服务器或数据库上运行,并把运行状况通过异步的方式汇报给管理者。管理者是一主一备,双活策略,一般是部署在不同的服务器节点上,主备管理者通过心跳机制注册到hadoop集群的zookeeper中,由zookeeper选择出主的调度管理者,主的调度管理者一经决策一般不会更改,一旦主的调度管理者异常,zookeeper才会启用备的管理者,主备切换对于调度系统是非感知的。执行者是多个,每个执行者一次可以执行一个作业,各执行者分别通过心跳注册到zookeeper中,管理者是从zookeeper中获取目前还可用的执行者,按照任务负载均衡算法选择执行者执行任务,一旦该执行者异常,作业就会由管理者分配给其它执行者执行。在一个实施例中,上述系统还包括:作业控制策略库7,用于存储所述关键作业执行路径和分组后的作业执行路径;所述关键作业执行路径和分组后的作业执行路径供所述作业执行装置调用。具体实施时,作业控制策略库7可以是一个分布式数据库也可以是一个关系型数据库,主要负责存储作业的基本信息、作业执行频度信息、作业的并发度、作业依赖关系信息、作业执行的时间窗口、作业的优先级,作业分组信息、作业运行日志,如运行开始时间、结束时间、返回状态码等等。基于同一发明构思,本发明实施例中还提供了一种分布式系统的作业调度方法,如下面的实施例所述。由于分布式系统的作业调度方法解决问题的原理与分布式系统的作业调度系统相似,因此分布式系统的作业调度方法的实施可以参见分布式系统的作业调度系统的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图3是本发明实施例中分布式系统的作业调度方法的流程示意图,该调度方法包括如下步骤:步骤101:提取分布式文件系统中的多个待调度作业;步骤102:对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系;所述血缘关系为多个待调度作业之间的从数据源到目标数据的流向关系;步骤103:根据所述血缘关系,构建多个待调度作业之间的所有作业执行路径;步骤104:根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径;关键作业执行路径为执行待调度作业时历史运行时间大于预设运行时间的路径;;步骤105:对所有作业执行路径进行拆分分组,得到分组后的作业执行路径;步骤106:根据所述关键作业执行路径和分组后的作业执行路径,对待调度作业进行调度执行。下面结合图4再以实例来进行说明,以便于理解如何实施本发明。步骤1:从hadoop分布式文件系统上遍历作业配置程序脚本,提取符合正则表达式的作业,即符合配置清单中程序后缀的程序。步骤2:在xml中预配置解析规则,并按此解析规则进行程序脚本的文本识别,如果文本格式和xml配置检查项一致,进入步骤4;不一致的,进入步骤3。步骤3:记录warn(警告)日志,当前脚本文本识别结束。步骤4:解析作业中描述性模块,解析出作业创建者,作业运行频度等作业信息,存入作业调度控制策略库。步骤5:进行作业血缘分析,获取作业血缘关系。血缘分析的过程见图4本发明步骤5血缘分析的流程图详述,此处不再赘述。步骤6:构建全作业aoe网(aoe图)。整个调度作业有只有一个入度为零的点(称为调度开始源点)和一个出度为零的点(称为调度结束点);其它图中每个顶点表示作业,弧表示作业运行,权表示作业运行的时间,形成一个复杂作业图。如图3所示,图中有v0到v9,10个作业,整个有向图表示前面一个作业完成后执行后面的作业。步骤7:按照步骤6构建的有向图,从批量开始点开始,将该点设置为已经访问,将其入栈。查看栈顶节点在aoe网是否可达到,且没有入栈和没有从这个点出发访问过的节点。如果有,将找到的这个点入栈,如果没有,将顶点访问到的下一个顶点的集合中的每个元素赋值0,出栈。当栈顶是终点时,设置该点没有访问过,记录栈中元素,弹出栈顶。反复重复执行上述直到栈元素为空。通过这种方式,计算出aoe图所有可能的全路径。再比对每个路径,识别出有向图中每条横向全路径是否有交会的路径,如果交会路径数小于某个阀值,认为是可以独立的调度。步骤8:针对与有共有交会的路径,从业务角度选择是拆分作业还是冗余部署作业,形成独立作业路径或重复的作业路径。步骤9:将完全没有交会的路径形成独立的调度组,将整个调度源点和汇点按组拆分,分组之后对应的信息记录只做作业信息表的etl_system中,并设置作业之间相关,进行分组调度,形成完全不相关的作业调度群组。步骤10:按照步骤6构建的有向图,利用有向图中作业的最早发生时间etv(earliesttimeofvertex)和作业的最晚发生时间ltv(latesttimeofvertex)判断关键路径,所述最晚发生时间是指每个顶点对应的作业最晚需要开始的时间,超出此时间将会延误整个调度工程的时间。最早开工时间etv[k]和最晚开工时间ltv[k]如果相等,则说明该路径已经是最优路径,如果该路径的最晚开工时间远远大于最早开工时间,该路径是该2个作业间的待优化路径。从调度开始到调度结束,不同的全路径下面重合的子路径称为重复路径,上述待优化路径中根据路径的重复程度,重重复程度越高,那该关键路径就越关键。最早发生时间的公式如下:其中,etvk为序号为k的作业的最早发生时间,etvi为序号为i的作业的最早发生时间,p[k]为序号为k的所有前序作业的集合,len<vi,vk>为序号为i的作业的执行时间;而最晚发生时间公式如下:其中,ltvk为序号为k的作业的最晚发生时间,etvk为序号为k的作业的最早发生时间,ltvo为序号为o的作业的最晚发生时间。s[k]为序号k的作业的所有后续作业的集合,len<vk,vo>序号为k的作业执行时间。步骤11:将步骤10识别出来的路径依次去掉最前端的节点或去掉最后端的节点,形成之前路径的子路径,如原本abc,现在路径是bc。计算该路径在全量路径中的包含数,不断的逐步裁剪,重新计算包含数,最后按照所有子路径的包含数由高到底排序,如果包含数越高,那对应的路径就越关键,优化该路径的效果最好,最近路径的作业优先级为最高。步骤12:将上述步骤7~~9获取作业分组信息以及步骤10~11获取的关键路径信息保存在作业调度控制策略库中,调度服务进行在每隔1分钟轮询前序依赖作业是否完成,作业的执行频度是否符合等条件,如果执行条件都满足,将作业载入调度队列中。具体地,分布式调度系统通过管理节点在zookeeper注册选举主的管理者,主的调度管理者一经决策一般不会更改,然后由管理者检查运行队列表,检查是否运行作业低于并发数,如果低于并发数,那从队列表中获取按优先级和到达时间选择作业,然后从zookeeper中选取目前还活着且空闲的执行者进行作业执行,在作业执行过程中,一旦执行者未按约定向zookeeper报告状态,那管理者把之前分配的作业转分给其它执行者重新执行。在一个实施例中,所述对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系,包括:识别每个待调度作业业务逻辑的源信息和目标信息,将源信息和目标信息关联,形成每个待调度作业信息项的血缘关系;根据每个待调度作业信息项的血缘关系,以及每个待调度作业之间的作业依赖关系和作业相关关系,形成多个待调度作业之间的血缘关系。下面结合图5说明血缘关系分析的详细过程,该方法包括:步骤501:识别出作业中业务含义的程序部分,所述业务含义是指进行实际的数据加工处理部分,除去必要的程序头和尾之类的内容。步骤502:将作业中业务含义内容按结束符,如sql语句以分号进行分割步骤503:判断分割后的程序内容是否包含create等创建表的关键字,如有则跳转入步骤504;没有则跳转入步骤505。步骤504:则将关键字的表标记为为作业临时表,不需要识别血缘。步骤505:对程序段内容深度遍历,识别关键程序段信息。步骤506:识别数据来源关键字,并将程序段判为当前处理,以sql语句为例,数据来源关键字为from操作语句。步骤507:识别关键字,如insert之类的,后面的表就是一个树的最上层节点,然后逐步往下,遇到子查询,将子查询作业之前节点下的一个子节点,然后再遍历子查询,相关信息作为该子节点的子信息,依次不断的循环迭代,最终形成一颗树形结构;实际分析过程通过压栈出栈来实现,当遇到在where\select\join时获得其下相应的字段和条件,如果select*之类情况,从表的源数据中获取该表的所有字段,作业血缘关系。子句处理完,栈弹出。步骤508:将上述解析结果记录于作业血缘关系表中,作业血缘关系至少需要包含作业号、目标库、目标表、目标字段、源库、源表、源字段等信息,示例如下:作业号目标库目标表目标字段源库源表源字段1td1tt1tc1sd1st1sc12td1tt2tc2sd1st1sc2表1作业血缘关系表步骤509:如上所述表1作业血缘关系表中的内容做去重过滤,形成作业血缘关系表1然后进行自关联,关联条件是目标库=源库、并且目标表=源表、并且目标字段=源字段、并且作业号不相等,获取出作业号之间的关系就是他们的依赖关系,进行存储。步骤510:将作业信息,作业状态信息,作业频度信息,作业调度信息等按图的作业调度控制策略er图(如图7所示)的内容存入数据库,那作业先后执行。在一个实施例中,根据所述血缘关系,构建多个待调度作业之间的所有作业执行路径,包括:根据所述血缘关系,构建所有待调度作业的aoe图;根据所述血缘关系,构建所有待调度作业的aoe图,包括:虚拟出第一点和第二点构建一个最初的aoe图,第一点是入度为零的点,所述第一点作为整个待调度作业的开始源点,第二点是出度为零的点,作为整个待调度作业的结束点;从血缘分析装置中获取第一层待调度作业,将获取的每个待调度作业都作为一个顶点加入到aoe图中,从整个待调度作业的开始源点到每个所述顶点画一条有向弧,弧的权重为零;所述第一层待调度作业为没有前序作业的作业;依次遍历aoe图中除了调度结束点之外每一个还没出度的顶点,从血缘分析装置中获取所述还没出度的顶点的后续作业,当所述后续作业在aoe图中不存在时,在aoe图中新增一个顶点作为所述后续作业的顶点,新增一条还没出度的顶点到所述后续作业顶点的有向弧,将每个还没出度的顶点对应待调度作业的预估作业运行时间或历史实际运行时间作为该有向弧的权重;如果从血缘分析装置获取不到当前作业的后续作业,将整个待调度作业的调度结束点作为当前作业的目标点,当前作业到调度结束点的有向弧的权重为当前作业的预估作业运行时间或历史实际运行时间。下面结合附图6说明根据血缘关系构建的所有待调度作业的aoe图的过程。步骤601:将每个作业使用vi表示,其中i表示作业编号,作为图分析的一个顶点。步骤602:把作业历史运行时间或预计运行时间成连接作业间的弧的权值,形成了各顶点之间的连接线。步骤603:整个调度作业有只有一个入度为零的点(称为调度开始源点)和一个出度为零的点(称为调度结束点),形成一个最原始的aoe网。步骤604:将上述的每个顶点和弧加入进来,如有了该作业,再从血缘分析中获取其源的作业,而源作业到该作业的弧的权值就是源作业的运行时间,依次类推,加入的方法由汇聚点向源点递推,由源点向汇聚点递推。步骤605:最终所有的作业信息都在该aoe网中表示,除了开始源点和结束点,其它作业节点有有源有目标,形成源到目标的aoe的作业流的全路径图。在一个实施例中,在所有作业执行路径中识别出关键作业执行路径,包括:确定aoe图中每个顶点对应待调度作业的最早发生时间和最晚发生时间;根据每个顶点对应待调度作业的最早发生时间和最晚发生时间,确定aoe图中作业执行路径的重复程度;根据所述aoe图中作业执行路径的重复程度,确定关键作业执行路径。在一个实施例中,确定aoe图中每个顶点对应待调度作业的最早发生时间和最晚发生时间,包括:按照如下公式计算每个待调度作业对应的最早发生时间:其中,etvk为序号为k的作业的最早发生时间,etvi为序号为i的作业的最早发生时间,p[k]为序号为k的所有前序作业的集合,len<vi,vk>为序号为i的作业的执行时间;按照如下公式计算每个顶点对应待调度作业的最晚发生时间:其中,ltvk为序号为k的作业的最晚发生时间,etvk为序号为k的作业的最早发生时间,ltvo为序号为o的作业的最晚发生时间,s[k]为序号k的作业的所有后续作业的集合,len<vk,vo>序号为k的作业执行时间。在一个实施例中,上述调度方法还包括:存储所述关键作业执行路径和分组后的作业执行路径;所述关键作业执行路径和分组后的作业执行路径供对待调度作业进行调度执行时调用。具体实施时,作业调度控制策略库er图示例如图7所示,该er以表etl_job表为中心,该表存储所有调度作业的属性信息,其中该表主键是etl_system为作业分组编号,etl_job为作业唯一的作业名。etl_sys表是调度作业分组信息表,该表限定每个分组作业的调度的并发度等相关作业组范畴的控制策略。同时该调度策略库还有etl_job_status和etl_job_log表,分别存储了运行作业的状态信息和运行日志信息,其中状态有ready准备好但前序未满足,pending等待执行,done表示完成执行,failed表示失败等,在etl_job_log表中记录了具体的调度换回的错误代码等信息。etl_job_dependency保存着作业血缘分析的结果信息,先执行源作业,再执行目标作业。etl_relatedjob保存作业的相关信息,调度时同一组当日批量作业完成后再统一进行下一日的批量调度。etl_job_priority存储作业优先级,一般关键路径作业优先级较高,在相同等待执行的作业中,优先级高的作业优先被调度执行。etl_job_stream是作业执行的触发作业,当前序作业完成后触发后续作业自动执行。除此还有etl_job_ctrl和etl_job_timewindow等作业执行频度和运行时间窗口控制表,记录了具体这个作业什么时候可运行的信息。本发明实施例实现了如下技术效果:首先,通过对多个待调度作业进行分析,得到多个待调度作业之间的血缘关系,根据血缘关系,构建多个待调度作业之间的所有作业执行路径,实现了作业执行路径的自动配置,可根据多个待调度作业之间的血缘关系找到数据源;其次,根据待调度作业的历史运行时间,在所有作业执行路径中识别出关键作业执行路径,对调度作业进行合理分析,合理配置作业执行路径,在实际调度时,对于关键路径动态分配更多的并发度和计算资源,确保关键路径作业能尽快完成,以达到整个批量的运行时间最快最优,提高整个调度作业的时效,同时根据历史作业运行经验的自学习自反馈能力,实现了资源合理分配;最后,通过对所有作业执行路径进行拆分分组,降低作业间的依赖复杂度和耦合度,提高了海量作业的调度时效。显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1