文档首页/ 数据治理中心 DataArts Studio/ 最佳实践/ 数据开发进阶实践/ 离散小时调度与作业最近依赖调度逻辑
更新时间:2024-08-08 GMT+08:00
分享

离散小时调度与作业最近依赖调度逻辑

数据开发当前支持两种调度依赖策略:传统周期调度依赖和自然周期调度依赖。

传统周期调度依赖的详细信息请参见传统周期调度

自然周期调度依赖的详细信息请参见自然周期调度

随着用户业务的演进,自然周期调度中,增加了许多新的调度规则,如离散小时调度,最近依赖调度等。本章节详细讲解这两个调度规则。

离散小时调度

场景一:离散小时依赖月、周、天 ,或者月、周、天依赖离散小时, 这六种依赖,依赖的时间范围都是依赖自然天内的所有作业实例。

表1 离散小时调度依赖逻辑一

场景

依赖处理逻辑

离散小时依赖月

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天是每月3号, 作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。

示例二:作业是A离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。A依赖B,假设今天不是每月的3号,即今天没有作业B的实例,则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。

月依赖离散小时

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是月调度,每月3号12点调度。B依赖A,当作业B在每月3号调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。

离散小时依赖周

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例一:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天是每周星期一,作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后, 才会执行作业A的实例。

示例二:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。A依赖B,假设今天不是星期一,即今天没有作业B的实例, 则因为依赖的作业B在今天没有实例,作业A在2点、5点、15点的实例会直接运行。

周依赖离散小时

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是周调度,每周星期一12点调度。B依赖A,当作业B在星期一调度时,作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。

离散小时依赖天

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。A依赖B,则作业A在2点、5点、15点的实例,都会依赖作业B在12点的实例,等到作业B在12点的实例执行成功后,才会执行作业A的实例。

天依赖离散小时

依赖时间段范围是[当天的零点,下一天的零点) 这个时间段的作业实例是否跑成功。区间段范围是前闭后开。

示例:作业A是离散小时调度,调度时间分别是2/5/15点;作业B是天调度,每天12点调度。B依赖A,则作业B在12点的实例,会等依赖的作业A在2/5/15点的实例,都执行成功后,才会开始调度。

场景二:离散小时依赖小时、分钟、离散小时, 或者小时、分钟依赖离散小时,依赖都遵循如下规则。

  • 规则一:自然天内,依赖关系中的上游、下游任务数量一致,则上游、下游一对一依赖。

    解释:例如作业A依赖作业B,作业A是离散小时调度,每天3/6/8点运行,则作业A一天内有3个实例;作业B小时作业,间隔8小时调度一次,每天0点、8点、16点调度,则作业B一天也是3个实例。

    上游作业B与下游作业A在一天内,都是3个实例,则作业A与作业B一对一依赖。

    所以作业A与作业B的依赖情况为: 作业A在3点的实例,依赖作业B在0点的实例;作业A在6点的实例,依赖作业B在8点的实例;作业A在8点的实例,依赖作业B在 16点的实例。

  • 规则二:自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将会根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。

    先向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。

    通过图表进一步进行原理解释:

    “先向前找上游依赖实例,依赖上游一整个区间内的实例” 解释如下:

    图1 先向前找上游依赖实例,依赖上游一整个区间内的实例

    “向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例” 解释如下:

    图2 向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例
表2 离散小时调度依赖逻辑二

场景

依赖处理逻辑

离散小时依赖小时

依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,小时作业B,作业A依赖作业B。

当离散小时作业A、小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖;

当离散小时作业A、小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。

小时依赖离散小时

依赖时间段范围是[当天的零点,下一天的零点) ,小时作业A,离散小时作业B,作业A依赖作业B。

当小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖;

当小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。

离散小时依赖分钟

依赖时间段范围是[当天的零点,下一天的零点) ,离散小时作业A,分钟作业B,作业A依赖作业B。

当离散小时作业A、分钟作业B在一天内的实例数量一致时,适用规则一,一对一依赖;

当离散小时作业A、分钟作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。

分钟依赖离散小时

依赖时间段范围是[当天的零点,下一天的零点) ,分钟作业A,离散小时作业B,作业A依赖作业B。

当分钟作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖;

当分钟作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。

离散小时依赖离散小时

依赖时间段范围是[当天的零点, 下一天的零点) ,离散小时作业A,离散小时作业B,作业A依赖作业B。

当离散小时作业A、离散小时作业B在一天内的实例数量一致时,适用规则一,一对一依赖;

当离散小时作业A、离散小时作业B在一天内的实例数量不一致,适用规则二,向前就近找一整个区间的上游实例依赖;未找到,向后找最近的一个实例依赖。

最近依赖调度

最近依赖调度,是在自然周期调度的基础上,对于天依赖小时、天依赖分钟、小时依赖分钟这三种依赖场景,支持选择依赖最近的作业实例。

表3 最近依赖调度

场景

依赖处理逻辑

天依赖小时(勾选最近依赖)

依赖时间段范围是[当天的零点,下一天的零点) ,不可跨天。

示例一:天作业A每天8点调度;小时作业B每小时15分钟开始调度。则天作业A依赖最近的小时作业实例,即依赖7点15分的小时作业实例。

示例二:天作业A每天0点30分调度;小时作业B每小时40分钟开始调度。因为天作业前面没有小时任务,则天任务不依赖任何小时任务,直接运行。

天依赖分钟(勾选最近依赖)

依赖时间段范围是[当天的零点, 下一天的零点) ,不可跨天。

小时依赖分钟(勾选最近依赖)

往前找到最近的分钟任务,挂载依赖。

示例:小时作业A每小时15分钟开始调度;分钟作业B从凌晨一点开始每15分钟调度一次。则小时作业A在0点15分的实例,依赖分钟作业B在昨天23点45分的实例;小时作业A在1点15分的实例,依赖分钟作业B在1点15分的实例。

相关文档