【问题标题】:Airflow catchup new tasks added to dagdag 新增气流追赶任务
【发布时间】:2020-05-12 10:34:23
【问题描述】:

当您使用 catchup=True 部署新的 DAG 时,Airflow 调度程序会自动调度从 start_date 到现在的所有任务。它结束了,你会得到很多深绿色的球,这意味着过去的那些 DAG 已经运行了。

但现在您想向过去的 DAG 运行添加新任务。我应该怎么做才能让旧 DAG 运行识别新任务并运行它们?

【问题讨论】:

    标签: airflow


    【解决方案1】:

    您应该clear 运行旧的 DAG(也可以在 GUI 中完成)。清除的运行将被重新安排,包括新添加的任务。

    【讨论】:

    • 另外,为了避免对过去不需要重新运行的任务进行浪费计算,可以编写自定义脚本首先清除旧的 DagRuns,然后为已经计算的任务创建错误条目;这样只会运行新添加的任务
    • 我不想丢失日志并运行有关已运行的 2000 个任务的信息。我知道当 DAG 完成后,添加任务是没有意义的,这是在合同中作弊。我将尝试将旧的 DAG 设置为“运行”,看看它是否有效。我想调度程序应该重新评估 dag deps
    • @dinigo 你不会丢失旧的日志,新的运行会产生新的日志。您也可以在日志中找到运行信息。
    • 我无法清除日志。我怀疑我使用的 Airflow 版本没有正确创建任务实例。因为在本地开发环境中,气流让我通过删除来赶上,但在产品中却没有。所以它现在是一个数据库:/
    【解决方案2】:

    如果您可以访问气流 cli,则可以使用 backfill command 在任何时间段内运行新任务。该命令不会重新运行任何已在后续 dag 运行中运行的任务。

    回填的开始和结束日期是可选的,因此您可以运行

    $ airflow backfill your_dag_id

    【讨论】:

    • 我从这个问题开始了解了回填,并且正则表达式选项非常适合这个用例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多