一种数据仓库的自适应动态调度方法及系统与流程

文档序号:15386258发布日期:2018-09-08 00:36阅读:890来源:国知局

本发明涉及数据库技术领域,特别是涉及一种数据仓库的自适应动态调度方法及系统。



背景技术:

在企业大数据分析中,随着业务的不断开展,数据分析背后所依赖的表和etl任务也逐渐增多。当etl任务达到一定数量时,数据仓库的调度任务就显得极其重要。

传统的数据仓库调度往往是按指定顺序进行调度,如按照ods(操作数据存储)、dw(数据仓库)、dm(数据集市)的顺序,或者按照主题进行分包调度。此时,任务和任务之间往往不能无缝衔接,一个时间过长的任务可能会让许多依赖他的任务一直处于等待状态,而导致服务器资源不能充分利用,引起总调度时间过长。这时数据仓库管理员需要不断的调整,而有的调整可能又会带来新的问题,调度往往很难达到最优状态。

因此,需要一种可以高效智能的完成调度任务,缩短etl任务总调度时间的数据仓库调度方法或系统。



技术实现要素:

本发明所要解决的技术问题是克服现有技术的不足,提供一种数据仓库的自适应动态调度方法及系统。

为解决上述技术问题,本发明提供一种数据仓库的自适应动态调度方法,其特征在于,包括如下步骤:

步骤一:定义etl任务优先函数f(e),计算每个etl任务对应的f(e),用f(e)衡量etl任务的调度优先度,调度优先度高的etl任务则需要优先执行。

步骤二:定义etl任务可执行标记r(e),根据etl中表依赖关系及表状态日志初始化r(e)。etl任务可执行需其依赖的所有表都已成功执行,否则需继续等待。

步骤三:针对r(e)中可执行的etl任务,选择f(e)最大的etl任务并启动任务。

步骤四:任务完成后,更新相关元数据表,计算待执行etl任务对应的r(e),并循环步骤三、步骤四,直到所有的任务都执行完毕。

所述步骤一中,包括如下表字段:

其中表权重,根据项目的级别来确定,项目级别越高,权重越高。下面是对于第i个etl任务,如何计算优先函数f(ei):

8)对于第i个etl任务ei来说,根据表和etl对应关系,得到ei处理的是ti表;

9)根据表依赖关系,得到k1个表tik1,是依赖ti表的,也就是说,这k1个表对应的etl需要等ti表更新完才能执行,从表权重中得到tik1权重分别为wik1,权重相加和为wi1,这个是第一层依赖(直接依赖)的表权重之和;

10)对于这tik1个表,可以得到k2个表tik2是依赖tik1,也就是间接依赖ti表,这里称为第二层依赖,tik2表权重之和为wi2;

11)按照第3步,依次循环下去,得到最后一层(第s层)依赖表的权重和wis;

12)将每一层依赖表的权重和相加得到w(ei)=wi1+wi2+…+wis;

13)通过etl执行日志,可以计算ei最近n天的平均执行时间t(ei),等于最近n天结束时间减去开始时间的平均值;

14)定义f(ei)=w(ei)/t(ei),也就是被依赖权重越高、执行时间越短的优先;

所述步骤二中,计算第i个etl任务ei可执行标记r(ei),从表依赖关系中,得到ti依赖k个表rtik,从表状态日志中,获取rtik是否更新成功,如都已经更新成功,则r(ei)为1,否则为0;

所述步骤四中,相关元数据表包括表状态日志、etl执行日志等等,其中,表状态日志插入每个表每天更新的时间以及是否更新成功的标记等信息,etl执行日志插入每个etl执行的开始时间、结束时间、成功标记等信息。

一种数据仓库的自适应动态调度系统,其特征在于:包括:元数据模块、etl动态顺序模块、etl任务管理模块,所述元数据模块,用于记录数据仓库调度过程中的元数据信息,所述etl动态顺序模块,对etl任务进行动态顺序选择,并将etl任务提交给etl任务管理模块,所述etl任务管理模块,是将接收到的etl任务启动,并监控任务的执行状态,在任务执行完成后更新元数据模块,并通知etl动态顺序模块开始选择etl。

所述元数据模块中包括表依赖关系模块、表与etl对应关系模块、表权重模块、表状态日志模块和etl执行日志模块,表依赖关系模块用于记录表依赖关系,表与etl对应关系模块用于记录表与etl对应关系,表权重模块用于记录表权重,表状态日志模块用于记录表状态日志,etl执行日志模块用于记录etl执行日志。

所述etl动态顺序模块包括三个子模块:etl优先函数初始化子模块、etl可执行状态计算子模块、etl任务执行选择子模块,所述etl优先函数初始化子模块,是根据表依赖关系、表与etl对应关系、表权重、etl执行时间等,计算每个etl任务对应的调度优先度,所述etl可执行状态计算子模块,是根据etl中表依赖关系及表状态日志计算每个etl任务的可执行状态,所述etl任务执行选择子模块,是针对可执行的etl,选择调度优先度最高的etl任务,并将任务提交给etl任务管理模块。

本发明所达到的有益效果:本发明针对数据仓库调度问题进行了算法和系统的设计,先根据元数据表信息计算每个etl任务的调度优先度,然后针对可执行的etl任务按照调度优先度排序动态选择任务进行调度。经实践,该方法和系统能够高效智能的完成调度任务,大大降低了etl任务的总调度时间。

附图说明

图1为本发明的示例性实施例中的数据仓库自适应动态调度方法的流程示意图;

图2为本发明的示例性实施例中的数据仓库自适应动态调度系统的结构示意图。

具体实施方式

下面结合附图和示例性实施例对本发明作进一步的说明:

参阅图1所示,一种数据仓库的自适应动态调度方法的流程,具体步骤为:

步骤11:定义etl任务优先函数f(e),计算每个etl任务对应的f(e),用f(e)衡量etl任务的调度优先度,调度优先度高的etl任务则需要优先执行,包括如下表字段:

其中表权重,根据项目的级别来确定,项目级别越高,权重越高。下面是对于第i个etl任务,如何计算优先函数f(ei):

1)对于第i个etl任务ei来说,根据表和etl对应关系,得到ei处理的是ti表

2)根据表依赖关系,得到k1个表tik1,是依赖ti表的,也就是说,这k1个表对应的etl需要等ti表更新完才能执行,从表权重中得到tik1权重分别为wik1,权重相加和为wi1,这个是第一层依赖(直接依赖)的表权重之和。

3)对于这tik1个表,可以得到k2个表tik2是依赖tik1,也就是间接依赖ti表,这里称为第二层依赖,tik2表权重之和为wi2

4)按照第3步,依次循环下去,得到最后一层(第s层)依赖表的权重和wis。

5)将每一层依赖表的权重和相加得到w(ei)=wi1+wi2+…+wis。

6)通过etl执行日志,可以计算ei最近7天的平均执行时间t(ei),等于最近n天结束时间减去开始时间的平均值。

定义f(ei)=w(ei)/t(ei),也就是被依赖权重越高、执行时间越短的优先。

步骤12:定义etl任务可执行标记r(e),如当前时刻etl任务可执行则为1,否则为0。etl任务可执行,需要其依赖的所有表都已执行成功,根据etl中表依赖关系及表状态日志初始化r(e)。

步骤13:针对r(e)中可执行的etl任务,选择f(e)最大的etl任务并启动任务。

步骤14:任务完成后,更新相关元数据表如表状态日志、etl执行日志,重新计算待执行etl任务对应的r(e),并循环步骤13-14,直到所有的任务都执行完毕。

参阅图2所示,一种数据仓库的自适应动态调度系统的结构,包括:元数据模块21、etl动态顺序模块22、etl任务管理模块23。

元数据模块21,用于记录数据仓库调度过程中的元数据信息,主要包括:表依赖关系模块、表与etl对应关系模块、表权重模块、表状态日志模块和etl执行日志模块,表依赖关系模块用于记录表依赖关系,表与etl对应关系模块用于记录表与etl对应关系,表权重模块用于记录表权重,表状态日志模块用于记录表状态日志,etl执行日志模块用于记录etl执行日志。

etl动态顺序模块22,对etl任务进行动态顺序选择,并将etl任务提交给etl任务管理模块。其中包括三个子模块:etl优先函数初始化子模块221、etl可执行状态计算子模块222、etl任务执行选择子模块223。

etl优先函数初始化子模块221,是根据表依赖关系、表与etl对应关系、表权重、etl执行时间等,计算每个etl任务对应的调度优先度。

etl可执行状态计算子模块222,是根据etl中表依赖关系及表状态日志计算每个etl任务的可执行状态。

etl任务执行选择子模块223,是针对可执行的etl,选择调度优先度最高的etl任务,并将任务提交给etl任务管理模块。

etl任务管理模块23,是将接收到的etl任务启动,并监控任务的执行状态,在任务执行完成后更新元数据模块,并通知etl动态顺序模块开始选择etl。

本发明主要用于提供一种数据仓库的自适应动态调度方法及系统,先根据元数据表信息计算每个etl任务的调度优先度,然后针对可执行的etl任务按照调度优先度排序动态选择任务进行调度,大大降低了etl任务的总调度时间。

以上实施例不以任何方式限定本发明,凡是对以上实施例以等效变换方式做出的其它改进与应用,都属于本发明的保护范围。

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