气流不会回填最新的运行

时间:2016-08-09 17:18:34

标签: airflow airbnb

出于某种原因,Airflow似乎没有触发每周计划间隔的dag的最新运行。

当前日期:

$ date
$ Tue Aug  9 17:09:55 UTC 2016

DAG:

from datetime import datetime
from datetime import timedelta

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG(
    dag_id='superdag',
    start_date=datetime(2016, 7, 18),
    schedule_interval=timedelta(days=7),
    default_args={
        'owner': 'Jon Doe',
        'depends_on_past': False
    }
)

BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag
)

运行调度程序

$ airflow scheduler -d superdag

由于调度程序应回填7 / 18,7 / 25,8 / 1和8/8,因此您预计共有四次DAG运行。 但是,最后一次运行没有安排。

Airflow DAG Runs

enter image description here

编辑1:

我理解Vineet虽然似乎没有解释我的问题。

在上面的例子中,DAG的开始日期是7月18日。

  • 第一次DAG运行:7月18日
  • 第二次DAG运行:7月25日
  • 第三次DAG运行:8月1日
  • 第四次DAG运行:8月8日(未运行)

每个DAG Run处理前一周的数据。

今天是8月9日,我预计第四次DAG运行的执行日期为8月8日,处理上周(8月1日至8月8日)的数据,但事实并非如此。

3 个答案:

答案 0 :(得分:3)

Airflow始终安排前一时段。因此,如果你有一个计划每天运行的dag,8月9日,它将安排在8月8日执行execute_date。类似地,如果计划间隔是每周一次,那么在8月9日,它将安排返回1周,即8月2日,尽管这将在8月9日运行。这只是气流簿记。你可以在气流维基(https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls)中找到它:

  

了解执行日期   Airflow是作为ETL需求的解决方案而开发的。在ETL世界中,您通常会汇总数据。所以,如果我想总结2016-02-19的数据,我会在格林威治标准时间2016-02-20午夜进行,这将在2016-02-19的所有数据可用之后。   这个日期可以在Jinja和Python callable的上下文中以多种形式提供给您,如此处所述。作为注释,ds指的是date_string,而不是日期开始,因为可能会让某些人感到困惑。

答案 1 :(得分:0)

类似的问题也发生在我身上。 我通过手动运行解决了它 airflow backfill -s start_date -e end_date DAG_NAME 其中start_date和end_date涵盖缺少的execution_date,在您的情况下,2016-08-08。 例如, airflow backfill -s 2016-08-07 -e 2016-08-09 DAG_NAME

答案 2 :(得分:0)

我这几天在学习apache气流时也遇到了类似的问题。

我认为正如 Vineet 所解释的,鉴于 airfow 的工作方式,您可能应该将执行日期用作DAG 执行的开始,而不是DAG 执行的结束强>正如你在下面所说的。

<块引用>

我理解 Vineet,尽管这似乎不能解释我的问题。

在我上面的示例中,DAG 的开始日期是 7 月 18 日。

第一次 DAG 运行:7 月 18 日 第二次 DAG 运行:7 月 25 日 第三次 DAG 运行:8 月 1 日 第四次 DAG 运行:8 月 8 日(未运行)

每个 DAG Run 从哪里处理数据 上周。

为了使其工作,您可能应该使用,例如,7 月 18 日作为 7 月 18 日至 7 月 22 日这一周 DAG 执行的开始日期,而不是结束日期7 月 11 日至 7 月 15 日这一周的 DAG 执行