DataWorks支持分钟、小时、日、周、月、年等类型的调度任务互相依赖,调度类型不同,任务执行的周期数不同。任务各周期是通过实例的方式执行,当上下游调度依赖的类型不同时,您可通过该文档了解上下游各周期实例如何挂载依赖,即上下游任务不同周期实例的依赖情况。
背景信息
DataWorks中,调度任务会根据调度类型及周期数生成相应的周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),通过实例的方式运行任务。周期任务设置的依赖关系,其本质是任务间所生成实例的依赖。上下游任务的调度类型不同,其生成的周期实例数及实例的依赖情况不同。
DataWorks支持多种调度依赖场景,不同场景的调度任务,可选择同周期依赖或依赖上一周期。同周期依赖及依赖上一周期,详情请参见配置同周期调度依赖、配置依赖上一周期(跨周期依赖)。
配置调度依赖前,您需先了解以下内容。
序号 | 描述 | 相关文档 |
1 | DataWorks支持多种调度类型(即分钟、小时、天、周、月、年),当上下游调度类型不一致时,DataWorks根据任务定时运行时间的就近原则设置调度依赖。 说明
| |
2 | DataWorks上任务一旦设置依赖,即表示上下游任务间存在数据依赖。无论下游任务定时运行时间为几点,均需等上游任务执行完成后,下游才满足可执行条件。 | |
3 | 您可通过具体场景示例,进一步理解设置依赖的就近原则。 | 场景包括:
|
挂载依赖:就近原则
DataWorks的周期任务运行时会生成多个周期实例,下游周期实例会依赖上游周期实例(该上游实例需在当前下游实例的定时运行时间之前产生)。
通常,若不指定需挂载至某个周期实例,下游周期实例挂载依赖时会遵循就近原则,即依赖距离其定时运行时间最近(在当前实例的定时时间之前,或与当前实例的定时时间一致),且未被其他周期实例依赖的上游周期实例。不同场景的依赖原则具体如下。
下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。
根据就近原则挂载依赖时,对于下游任务当天的第一个实例,如果上游没有比它更早的实例,则下游默认依赖上游当天的第一个实例。
场景 | 说明 | 示意图 |
小时、分钟任务互相依赖场景 | 任务依赖与周期实例的定时时间有关
| 小时、分钟任务互相依赖的细分场景概览如下图。 小时任务依赖小时任务示例如下图。 |
任务依赖与周期实例的定时时间无关 小时任务依赖小时任务,或分钟任务依赖分钟任务,并且上下游节点的周期数(即当天产生的实例个数)一致,将按照周期数一一对应,设置依赖关系。 | ||
天任务依赖小时或分钟任务 |
|
各细分调度场景的依赖及运行情况详情介绍,请参见附录:复杂依赖场景汇总。
依赖关系对任务执行的影响
下游任务一旦挂载依赖,若上游任务非运行成功状态,即使到达下游任务的定时运行时间,该任务也不会执行。
例如,下游小时任务B依赖上游天任务A。
天任务A:定时运行时间设置为
07:00
。小时任务B:定时运行时间设置为
00:00
、08:00
、16:00
。
若天任务A未运行完成,即便到了下游小时任务B的定时运行时间00:00
,该任务也不会运行。下游任务B的最早实际运行时间为07:00
。
附录:复杂依赖场景汇总
不同周期任务的细分依赖场景及其运行情况如下。
下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。
根据就近原则挂载依赖时,对于下游任务当天的第一个实例,如果上游没有比它更早的实例,则下游默认依赖上游当天的第一个实例。
小时任务依赖其他任务
细分场景 | 依赖及运行说明 | 示意图 |
小时任务依赖小时任务 |
| |
小时任务依赖天任务 |
| |
小时任务依赖分钟任务 |
|
天任务依赖其他任务
细分场景 | 依赖与运行情况 | 示意图 |
天任务依赖同周期天任务 |
| |
天任务依赖当天小时任务 |
| |
天任务依赖昨天的小时或分钟任务 |
| 以天任务依赖昨天的小时任务示例。 |
分钟任务依赖其他任务
细分场景 | 依赖说明 | 示意图 |
分钟任务依赖小时任务 |
| |
分钟任务依赖天任务 |
|
其他任务依赖周、月、年任务
当天、小时、分钟任务依赖周、月、年任务时,周、月、年调度任务在非调度时间内会生成空跑实例。该实例不会真实跑数据,不占用资源,也不阻塞下游任务执行。
以“天任务依赖未设置自依赖的周任务”场景示例:
上游周任务:每周一、周五正常调度执行;周二、周三、周四、周六、周日将生成空跑实例,到达定时运行时间后空跑实例将直接置为成功状态,不会真实执行代码逻辑。空跑实例不会影响下游实例的正常运行。
下游天任务:每天会定时生成调度实例,且依赖上游周任务每天生成的实例(包括空跑实例)。待上游周任务每天的实例运行完成且成功后,将会触发下游对应的实例运行。