74

假设您有一个气流 DAG,回填没有意义,这意味着,在它运行一次之后,随后快速运行它是完全没有意义的。

例如,如果您从某个仅每小时更新一次的源加载数据到您的数据库中,那么快速连续发生的回填只会一次又一次地导入相同的数据。

当您实例化一个新的每小时任务时,这尤其令人讨厌,并且它在N您指定的时间间隔开始运行之前,它错过的每一小时都会运行多次,做多余的工作。

我能想到的唯一解决方案是他们在文档常见问题解答中特别建议的东西

我们建议不要使用动态值作为 start_date,尤其是datetime.now()因为它可能会很混乱。

有什么方法可以禁用 DAG 的回填,或者我应该执行上述操作吗?

4

3 回答 3

75

升级到气流版本 1.8 并在气流.cfg 中使用 catchup_by_default=False 或将 catchup=False 应用于每个 dag。

https://github.com/apache/incubator-airflow/blob/master/UPDATING.md#catchup_by_default

于 2017-03-30T15:57:35.310 回答
19

在你的 dag 声明中设置 catchup=False 将提供这个确切的功能。

我没有评论的“声誉”,但我想说 catchup=False 是(由我)为此目的而设计的。此外,我可以验证在 1.10.1 中它在实例化中明确设置时是否正常工作。但是,当放置在默认参数中时,我看不到它工作。不过,我已经离开 Airflow 18 个月了,所以我还需要一段时间才能了解为什么默认 args 不能用于追赶。

dag = DAG('example_dag',
        max_active_runs=3,
        catchup=False,
        schedule_interval=timedelta(minutes=5),
        default_args=default_args)
于 2019-02-14T14:00:39.390 回答
15

这似乎是一个未解决的气流问题。我知道我真的很想拥有完全相同的功能。这是我所得到的;它可能对其他人有用。

这些 UI 特性(至少在 1.7.1.3 中)可以帮助解决这个问题。如果您转到树视图并单击特定任务(方框),则会出现一个对话框按钮,其中包含一个“标记成功”按钮。单击“过去”,然后单击“标记成功”会将 DAG 中该任务的所有实例标记为成功,它们将不会运行。顶级 DAG(顶部的圆圈)也可以以类似的方式标记为成功,但似乎没有办法标记多个 DAG 实例。

我还没有深入研究它,但是可以使用“trigger_dag”子命令来标记 DAG 的状态。见这里:https ://github.com/apache/incubator-airflow/pull/644/commits/4d30d4d79f1a18b071b585500474248e5f46d67d

用于标记 DAG 的 CLI 功能正在开发中: http: //mail-archives.apache.org/mod_mbox/airflow-commits/201606.mbox/%3CJIRA.12973462.1464369259000.37918.1465189859133@Atlassian.JIRA%3E https://github .com/apache/incubator-airflow/pull/1590

更新(2016 年 9 月 28 日):添加了一个新的运算符“LatestOnlyOperator”(https://github.com/apache/incubator-airflow/pull/1752),它将只运行最新版本的下游任务。听起来很有用,希望它很快就会发布

更新 2:从气流 1.8 开始,LatestOnlyOperator已发布。

于 2016-08-11T00:34:10.440 回答