必读:复杂依赖场景调度配置原则与示例

DataWorks支持分钟小时等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,您可通过该文档了解上下游各周期实例如何挂载依赖,即上下游任务不同周期实例的依赖情况。

背景信息

  • DataWorks中,调度任务会根据调度类型及周期数生成相应的周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),通过实例的方式运行任务。周期任务设置的依赖关系,其本质是任务间所生成实例的依赖。上下游任务的调度类型不同,其生成的周期实例数及实例的依赖情况不同。

  • DataWorks支持多种调度依赖场景,不同场景的调度任务,可选择同周期依赖或依赖上一周期。同周期依赖及依赖上一周期,详情请参见配置同周期调度依赖配置依赖上一周期(跨周期依赖)

配置调度依赖前,您需先了解以下内容。

序号

描述

相关文档

1

DataWorks支持多种调度类型(即分钟、小时、天、周、月、年),当上下游调度类型不一致时,DataWorks根据任务定时运行时间的就近原则设置调度依赖。

说明
  • 小时任务依赖小时任务,当天的周期数一致时,不符合该原则,即设置的调度依赖与任务的定时运行时间无关。

  • 天任务默认依赖小时、分钟任务当天所有周期实例,即待小时、分钟任务当天所有周期数据加工完成后,天任务才会对小时、分钟任务当天所有数据进行加工清洗。

挂载依赖:就近原则

2

DataWorks上任务一旦设置依赖,即表示上下游任务间存在数据依赖。无论下游任务定时运行时间为几点,均需等上游任务执行完成后,下游才满足可执行条件。

依赖关系对任务执行的影响

3

您可通过具体场景示例,进一步理解设置依赖的就近原则。

复杂依赖场景汇总

场景包括:

  • 天任务依赖场景

  • 小时任务依赖场景

  • 分钟任务依赖场景

  • 依赖周月年任务场景

挂载依赖:就近原则

DataWorks的周期任务运行时会生成多个周期实例,下游周期实例会依赖上游周期实例(该上游实例需在当前下游实例的定时运行时间之前产生)。

通常,若不指定需挂载至某个周期实例,下游周期实例挂载依赖时会遵循就近原则,即依赖距离其定时运行时间最近(在当前实例的定时时间之前,或与当前实例的定时时间一致),且未被其他周期实例依赖的上游周期实例。不同场景的依赖原则具体如下。

说明
  • 下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。

  • 根据就近原则挂载依赖时,对于下游任务当天的第一个实例,如果上游没有比它更早的实例,则下游默认依赖上游当天的第一个实例。

场景

说明

示意图

小时、分钟任务互相依赖场景

任务依赖与周期实例的定时时间有关

  • 默认情况:下游周期实例按照就近原则挂载依赖,即DataWorks会为下游周期实例挂载其定时运行时间之前与定时时间一致,且未被其他周期实例依赖的上游周期实例。

    说明

    当上游节点生成的周期实例数大于下游节点,下游周期实例可能依赖多个上游周期实例。

    您可参考细分场景图示中,小时任务与分钟任务未设置自依赖的场景进行理解。

  • 特殊情况:若上下游节点均设置了自依赖(即依赖上一周期:本节点(自依赖),则下游当前周期实例,依赖其定时运行时间之前与其定时时间一致的一个上游周期实例。

    说明

    您可参考细分场景图示中,小时任务与分钟任务设置自依赖的场景进行理解。

小时、分钟任务互相依赖的细分场景概览如下图。小时、分钟任务互相依赖

小时任务依赖小时任务示例如下图。小时任务依赖小时任务

任务依赖与周期实例的定时时间无关

小时任务依赖小时任务,或分钟任务依赖分钟任务,并且上下游节点的周期数(即当天产生的实例个数)一致,将按照周期数一一对应,设置依赖关系。

天任务依赖小时或分钟任务

  • 默认情况:天任务默认依赖小时、分钟任务当天所有周期实例,即待小时、分钟任务当天所有周期实例的数据加工完成后,天任务才会对其当天所有数据进行加工清洗。

  • 其他情况:若天任务只需依赖距离自己运行时间最近的小时、分钟周期实例,您可为小时、分钟任务设置自依赖(即依赖上一周期:本节点(自依赖),设置后,该小时、分钟周期实例运行完成后,天任务便会启动执行。

天任务依赖当天小时任务

各细分调度场景的依赖及运行情况详情介绍,请参见附录:复杂依赖场景汇总

依赖关系对任务执行的影响

下游任务一旦挂载依赖,若上游任务非运行成功状态,即使到达下游任务的定时运行时间,该任务也不会执行。

例如,下游小时任务B依赖上游天任务A。

  • 天任务A:定时运行时间设置为07:00

  • 小时任务B:定时运行时间设置为00:0008:0016:00

若天任务A未运行完成,即便到了下游小时任务B的定时运行时间00:00,该任务也不会运行。下游任务B的最早实际运行时间为07:00依赖关系对任务执行的影响

附录:复杂依赖场景汇总

不同周期任务的细分依赖场景及其运行情况如下。

说明
  • 下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。

  • 根据就近原则挂载依赖时,对于下游任务当天的第一个实例,如果上游没有比它更早的实例,则下游默认依赖上游当天的第一个实例。

小时任务依赖其他任务

细分场景

依赖及运行说明

示意图

小时任务依赖小时任务

  • 上下游周期数(即生成的实例数)一致

    上下游任务运行当天生成的周期实例,将一一对应挂载依赖。即下游首个实例依赖上游首个实例,下游第二个实例依赖上游第二个实例,以此类推。

  • 上下游周期数(即生成的实例数)不一致

    上下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游实例。

    说明

    当上游周期数小于下游周期数时,下游多个周期实例可能会依赖同一个上游周期实例。

小时任务依赖小时任务

小时任务依赖天任务

  • 小时任务未设置自依赖

    下游小时任务当天生成的所有周期实例依赖上游天任务。待天任务执行完成后,下游所有小时周期实例才启动执行。此时,到达定时运行时间的小时周期实例会并发执行。

    说明
  • 小时任务设置自依赖

    • 仅首个生成的小时周期实例依赖上游天任务,其余小时周期实例,依赖自己上一个周期的小时实例。

    • 天任务及上一周期的小时实例执行完成后,当前周期的小时实例才启动调度。此时,即使定时运行时间已到,小时周期实例也不会并发执行。

    说明

    自依赖(即依赖上一周期:本节点(自依赖)会跨天依赖,当昨天最后一个周期实例未运行完成,会导致今天的任务无法调度。

小时任务依赖天任务

小时任务依赖分钟任务

  • 分钟任务不设置自依赖

    下游小时任务依赖该小时内上游分钟任务生成的所有分钟周期实例。

  • 分钟任务与小时任务均设自依赖

    下游小时任务依赖该小时内距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游分钟周期实例。

小时任务依赖分钟任务

天任务依赖其他任务

细分场景

依赖与运行情况

示意图

天任务依赖同周期天任务

  • 上游天任务未设置自依赖

    默认下游天任务的周期实例挂载依赖至同周期的上游天任务周期实例。

  • 上游天任务设置自依赖

    上游天任务设置自依赖,下游天任务依赖上游天任务时存在跨周期依赖。

    说明

    自依赖(即依赖上一周期:本节点(自依赖)会跨天依赖,当昨天最后一个周期实例未运行完成,会导致今天的任务无法调度。

天任务依赖同周期天任务

天任务依赖当天小时任务

  • 小时任务未设置自依赖

    下游天任务会依赖上游小时任务当天生成的所有小时周期实例,即待小时任务当天所有周期数据加工完成后,天任务才会对小时任务当天所有数据进行加工清洗。

    说明

    若天任务只需依赖指定的小时周期实例,您可为小时任务设置自依赖(即依赖上一周期:本节点(自依赖),当该小时周期实例运行成功后,天任务便会自动调度。

  • 小时任务设置自依赖

    下游天任务会依赖距离其定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游小时周期实例。

天任务依赖当天小时任务

天任务依赖昨天的小时或分钟任务

  • 小时、分钟任务未设置自依赖

    下游天任务会依赖上游任务昨天生成的所有小时或分钟周期实例。

  • 小时、分钟任务设置自依赖

    下游天任务会依赖上游任务昨天生成的最后一个小时或分钟周期实例。

以天任务依赖昨天的小时任务示例。天任务依赖昨天的小时任务

分钟任务依赖其他任务

细分场景

依赖说明

示意图

分钟任务依赖小时任务

  • 分钟任务未设置自依赖

    下游分钟任务的周期实例,依赖距离其定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的小时周期实例,并且不重复依赖。

    说明

    该场景存在多个下游分钟周期实例,依赖同一个上游小时周期实例的情况。

  • 分钟、小时任务均设置自依赖

    下游分钟任务的周期实例,依赖自己上一周期实例;并且根据就近原则,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游小时周期实例。

分钟任务依赖小时任务

分钟任务依赖天任务

  • 分钟任务未设置自依赖

    下游分钟任务当天生成的所有分钟周期实例依赖天任务。当天任务到达定时运行时间且执行完成后,分钟任务才可执行。

    说明
    • 天任务运行完成后,定时时间已到的分钟周期实例会并发执行。若不希望实例并发执行,可为分钟任务设置自依赖(即依赖上一周期:本节点(自依赖)

    • 分钟任务不同实例之间的执行互不影响。

  • 分钟任务设置自依赖

    • 仅下游分钟任务生成的首个周期实例会依赖天任务,其他周期实例直接依赖自己的上一周期实例。

    • 天任务及上一周期的分钟实例执行完成后,当前周期的分钟实例才会启动调度。此时,即使定时运行时间已到,分钟周期实例也不会并发执行。

    说明

    自依赖(即依赖上一周期:本节点(自依赖)会跨天依赖,当昨天最后一个周期实例未运行完成,会导致今天的任务无法调度。

分钟任务依赖天任务

其他任务依赖周、月、年任务

当天、小时、分钟任务依赖周、月、年任务时,周、月、年调度任务在非调度时间内会生成空跑实例。该实例不会真实跑数据,不占用资源,也不阻塞下游任务执行。

以“天任务依赖未设置自依赖的周任务”场景示例:

  • 上游周任务:每周一、周五正常调度执行;周二、周三、周四、周六、周日将生成空跑实例,到达定时运行时间后空跑实例将直接置为成功状态,不会真实执行代码逻辑。空跑实例不会影响下游实例的正常运行。

  • 下游天任务:每天会定时生成调度实例,且依赖上游周任务每天生成的实例(包括空跑实例)。待上游周任务每天的实例运行完成且成功后,将会触发下游对应的实例运行。

image