繁体   English   中英

如何防止气流回填 dag 运行?

[英]How to prevent airflow from backfilling dag runs?

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

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

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

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

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

有什么方法可以禁用 DAG 的回填,还是应该执行上述操作?

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

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

在您的 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)

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

可以帮助解决此问题的 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.146518985las%3EJIRA://github%EJIRA .com/apache/incubator-airflow/pull/1590

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM