任务调度
1.什么是调度任务
依赖:依赖管理是整个DAG调度的核心。调度依赖包括依赖策略和依赖区间。
依赖分为任务依赖和作业依赖,任务依赖是DAG任务本身的依赖关系,作业依赖是根据任务依赖每天的作业产生的。两者在数据存储模型上有所不同。作业依赖树存储的多了两个时间:调度时间,数据时间。
job依赖:
作业依赖:
依赖是由依赖策略和调度依赖区间组成
依赖策略 当依赖job在调度区间内有多个Task时候,需要指定依赖策略 | 依赖策略 | 描述 | |–|--| | All(*) | 调度区间内,所有依赖均成功 | | Any(+) | 调度区间内,任何一个依赖任务成功 | | First(N) | 调度区间内,前面N个依赖成功 | | Last(N) | 调度区间内,后面N个依赖成功 | | Continuous(N) | 调度区间内, 连续N个依赖成功 |
调度依赖区间
定义调度依赖的区间,通过基准时间与偏移时间来计算。 表达式 = (基准时间t, 起始偏移时间x(m), 结束偏移时间x(n)) 比如 (“yyyy-MM-dd HH:00:00”, x(n), x(m)) 基准时间t : 基准时间的格式化,默认"yyyy-MM-dd HH:mm:ss" 起始偏移时间x(n) : 基准时间"向前偏移x(n)时间,作为偏移时间的起始点。(正数向前,负数向后) 结束偏移时间x(m):偏移开始时间 向前偏移x(m)时间,作为偏移时间的结束点。(正数向前,负数向后) 时间单位 : 年 y 月M 周w 天d 时h 分m
举例子:
年 (y
):比如 "2024-11-09 10:00:00", 2y, -1y
表示从基准时间向前偏移2年,再向后偏移1年,最终区间为 2022-11-09 10:00:00
到 2023-11-09 10:00:00
。
月 (M
):例如 "2024-11-09 10:00:00", 3M, -1M
表示从基准时间向前偏移3个月,再向后偏移1个月,最终区间为 2024-08-09 10:00:00
到 2024-09-09 10:00:00
。
周 (w
):例如 "2024-11-09 10:00:00", 2w, -3w
表示从基准时间向前偏移2周,再向后偏移3周,最终区间为 2024-10-26 10:00:00
到 2024-11-23 10:00:00
。
天 (d
):例如 "2024-11-09 10:00:00", -7d, 4d
表示从基准时间向后偏移7天,再向前偏移4天,最终区间为 2024-11-02 10:00:00
到 2024-11-13 10:00:00
。
小时 (h
):例如 "2024-11-09 10:00:00", -3h, 5h
表示从基准时间向后偏移3小时,再向前偏移5小时,最终区间为 2024-11-09 13:00:00
到 2024-11-09 05:00:00
。
作业计划 先说一下什么是作业计划,比如调度系统有1w+的job。这些job有每天执行一次或者多次,有纯依赖,有复杂依赖。一个job从第一次创建,如何知道下一次的执行时间,依赖等。就需要通过创建作业计划来完成。 作业计划有两种创建模式:
1.每天生成第二天的 2.当前任务执行初期或者完成时自动自动生成下游plan。
如果调度系统简单,直接可以使用第二种,但是对于1w+job的系统,或者某个纯依赖的上游任务很多,或者上游也是纯依赖并且图深度>10. 显然第二种会影响执行的效率。
依赖条件:是任务调度的必要条件,当一个任务被触发了,但依赖条件不满足,则必须等待。只有当所有的依赖条件都满足了,这个任务才能开始执行。
任务之间的依赖有上周期依赖、全周期依赖、连续周期依赖、断点周期依赖。
要清晰区分全周期依赖和连续周期依赖,我们可以从任务需要的数据范围和依赖周期的处理角度来理解。
1.全周期依赖 (Full Cycle Dependency)
定义:全周期依赖指的是某个任务在执行时,依赖的是整个周期内的所有数据。这意味着它需要周期内的每一部分数据来得出结果。通常是针对完整周期内的每个单位时间(如一天、一个月、一年等)进行处理。
特点:
-
依赖的是完整周期的每一个数据点。
-
适用于需要全面汇总整个周期数据的任务。
-
通常周期的单位较大(如天、月、年等)。
例子: 假设有一个任务是计算某网站的前一天的总PV数(页面浏览量)。这个任务需要依赖前一天24小时内每个小时的数据来进行汇总。在这种情况下,任务依赖的是前一天的所有小时数据,形成了全周期依赖。这里的数据范围包括周期内的每个时间单位(每小时),任务必须等到完整的周期数据都可用后才能开始。
2.连续周期依赖 (Continuous Cycle Dependency)
定义:连续周期依赖指的是某个任