9

我不明白为什么我们需要操作员(任务实例)的“开始日期”。我们传递给 DAG 的那个不就足够了吗?

此外,如果当前时间是 2018 年 2 月 7 日上午 8 点 30 点 UTC,现在我将 dag 的 start_date 设置为 2018 年 2 月 7 日上午 0 点,我的计划间隔的 cron 表达式为 30 9 * * *(每天上午 9 点 30 分,即期待在接下来的 1 小时内运行)。我的 DAG 会在今天上午 9 点 30 分还是明天(2 月 8 日上午 9 点 30 分)运行?

4

4 回答 4

13

关于任务实例的 start_date,我个人从未使用过它,我总是只有一个 DAG start_date。

但是,据我所知,这将允许您指定某些任务在与主 DAG 不同的时间开始。看来这是一项遗留功能,并且通过阅读常见问题解答,他们建议使用时间传感器来代替这种类型的事物,并且只为通过 DAG 传递的所有任务设置一个 start_date。

你的第二个问题:

运行的执行日期始终是基于您的计划的上一个期间。

来自文档(气流文档)

请注意,如果您在一天的 schedule_interval 上运行 DAG,则标记为 2016-01-01 的运行将在 2016-01-01T23:59 之后不久触发。换句话说,作业实例在其涵盖的时间段结束后启动。

澄清:

  • 如果设置为每日计划,则在 8 日将执行 7 日。
  • 如果设置为在星期日运行的每周计划,则该星期日的执行日期将是最后一个星期日。
于 2018-02-08T01:09:04.633 回答
1

一些复杂的需求可能需要任务级别的特定时间安排。例如,我可能希望我的 DAG 在某个聚合日志记录任务开始运行之前每天运行一整周,因此为了实现这一点,我可以在任务级别设置不同的开始日期。

更有用的信息...查看气流DAG类源,在 DAG 级别设置似乎只是意味着当任务 start_date 的默认值没有通过字典start_date传递给 DAG 时,它被传递给任务,或者default_args当没有start_date在每个任务级别上定义具体内容时。因此,对于您希望 DAG 中的所有任务同时启动(除了依赖项)的任何情况,start_date在 DAG 级别进行设置就足够了。

于 2018-12-20T17:43:03.137 回答
0

只是添加到这里已经存在的内容。依赖于另一个任务的任务的开始日期必须 >= 到其依赖项的开始日期。

例如:

  • 如果task_a依赖于task_b
  • 你不能拥有
    • task_a 开始日期 = 2019 年 1 月 1 日
    • task_b 开始日期 = 2019 年 1 月 2 日
    • 否则,task_a 将无法在 2019 年 1 月 1 日运行,因为 task_b 不会在该日期运行,您也无法将其标记为完成

你为什么要这个?

  • 对于一个任务,我会喜欢这个逻辑,它是一个外部任务传感器,等待另一个 dag 的完成。但是另一个 dag 的开始日期在当前 dag 之后。因此,当另一个 dag 不存在时,我不希望依赖到位
于 2019-11-26T11:28:50.983 回答
0

它可能不会按照以下说明设置任务的 dag 参数: https ://stackoverflow.com/a/61749549/1743724

于 2020-10-02T09:57:27.907 回答