3

For some reason, Airflow doesn't seem to trigger the latest run for a dag with a weekly schedule interval.

Current Date:

$ 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
)

Run scheduler

$ airflow scheduler -d superdag

You'd expect a total of four DAG Runs as the scheduler should backfill for 7/18, 7/25, 8/1, and 8/8. However, the last run is not scheduled.

Airflow DAG Runs

enter image description here

EDIT 1:

I understand that Vineet although that doesn’t seem to explain my issue.

In my example above, the DAG’s start date is July 18.

  • First DAG Run: July 18
  • Second DAG Run: July 25
  • Third DAG Run: Aug 1
  • Fourth DAG Run: Aug 8 (not run)

Where each DAG Run processes data from the previous week.

Today being Aug 9, I would expect the Fourth DAG Run to have executed with a execution date of Aug 8 which processes data for the last week (Aug 1 until Aug 8) but it doesn’t.

4

3 回答 3

5

气流总是为上一时期安排。因此,如果您有一个计划在 8 月 9 日每天运行的 dag,它将安排在 8 月 8 日执行 execution_date 的运行。类似地,如果计划间隔是每周,那么在 8 月 9 日,它会安排 1 周前,即 8 月 2 日,尽管这会在 8 月 9 日本身运行。这只是气流簿记。您可以在气流 wiki ( https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls ) 中找到它:

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

于 2016-08-09T18:27:59.123 回答
2

类似的问题也发生在我身上。我通过手动运行解决了它, 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

于 2018-05-14T21:23:01.050 回答
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 执行的结束日期。星期。

于 2021-06-11T06:58:24.273 回答