气流不回填最新 运行
Airflow does not backfill latest run
出于某种原因,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
您预计总共有四个 DAG 运行,因为调度程序应该回填 7/18、7/25、8/1 和 8/8。
但是,最后一个运行没有安排。
编辑 1:
我理解 Vineet,虽然这似乎不能解释我的问题。
在我上面的示例中,DAG 的开始日期是 7 月 18 日。
- 第一个 DAG 运行:7 月 18 日
- 第二个 DAG 运行:7 月 25 日
- 第三个 DAG 运行:8 月 1 日
- 第四个 DAG 运行:8 月 8 日(不是 运行)
其中每个 DAG 运行 处理上周的数据。
今天是 8 月 9 日,我预计第四个 DAG 运行 已执行,执行日期为 8 月 8 日,它处理上周(8 月 1 日至 8 月 8 日)的数据,但事实并非如此。
Airflow 总是安排在前一段时间。因此,如果您有一个计划在 8 月 9 日每天 运行 的 dag,它将在 8 月 8 日安排 运行 和 execution_date。类似地,如果计划间隔是每周一次,那么在 8 月 9 日,它将计划回溯 1 周,即 8 月 2 日,尽管这会在 8 月 9 日本身得到 运行。这只是气流簿记。您可以在气流维基 (https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls) 中找到它:
Understanding the execution date
Airflow was developed as a solution for ETL needs. In the ETL world, you typically summarize data. So, if I want to summarize data for 2016-02-19, I would do it at 2016-02-20 midnight GMT, which would be right after all data for 2016-02-19 becomes available.
This date is available to you in both Jinja and a Python callable's context in many forms as documented here. As a note ds refers to date_string, not date start as may be confusing to some.
我也遇到了类似的问题。
我手动解决了运行
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
我这几天在学习apache airflow的时候也遇到了类似的问题
我认为正如 Vineet 所解释的那样,鉴于 airfow 的工作方式,您可能应该将执行日期用作 DAG 执行的开始,而不是 DAG 执行结束 如下所述。
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.
要使其正常工作,您可能应该使用,例如,7 月 18 日作为 7 月 18 日至 7 月 22 日这一周 DAG 执行的开始日期,而不是 7月11日至7月15日这一周的DAG执行结束这一周
出于某种原因,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
您预计总共有四个 DAG 运行,因为调度程序应该回填 7/18、7/25、8/1 和 8/8。 但是,最后一个运行没有安排。
编辑 1:
我理解 Vineet,虽然这似乎不能解释我的问题。
在我上面的示例中,DAG 的开始日期是 7 月 18 日。
- 第一个 DAG 运行:7 月 18 日
- 第二个 DAG 运行:7 月 25 日
- 第三个 DAG 运行:8 月 1 日
- 第四个 DAG 运行:8 月 8 日(不是 运行)
其中每个 DAG 运行 处理上周的数据。
今天是 8 月 9 日,我预计第四个 DAG 运行 已执行,执行日期为 8 月 8 日,它处理上周(8 月 1 日至 8 月 8 日)的数据,但事实并非如此。
Airflow 总是安排在前一段时间。因此,如果您有一个计划在 8 月 9 日每天 运行 的 dag,它将在 8 月 8 日安排 运行 和 execution_date。类似地,如果计划间隔是每周一次,那么在 8 月 9 日,它将计划回溯 1 周,即 8 月 2 日,尽管这会在 8 月 9 日本身得到 运行。这只是气流簿记。您可以在气流维基 (https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls) 中找到它:
Understanding the execution date Airflow was developed as a solution for ETL needs. In the ETL world, you typically summarize data. So, if I want to summarize data for 2016-02-19, I would do it at 2016-02-20 midnight GMT, which would be right after all data for 2016-02-19 becomes available. This date is available to you in both Jinja and a Python callable's context in many forms as documented here. As a note ds refers to date_string, not date start as may be confusing to some.
我也遇到了类似的问题。
我手动解决了运行
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
我这几天在学习apache airflow的时候也遇到了类似的问题
我认为正如 Vineet 所解释的那样,鉴于 airfow 的工作方式,您可能应该将执行日期用作 DAG 执行的开始,而不是 DAG 执行结束 如下所述。
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.
要使其正常工作,您可能应该使用,例如,7 月 18 日作为 7 月 18 日至 7 月 22 日这一周 DAG 执行的开始日期,而不是 7月11日至7月15日这一周的DAG执行结束这一周