Airflow DAG的预定日期晚了一周

时间:2019-05-06 14:51:19

标签: python airflow

我有一个DAG计划在每个星期一的10AM运行。这是我的dag定义

DAG = models.DAG(
  dag_id="etl", schedule_interval="0 10 * * 1", start_date=datetime(2018, 10, 1), 
  default_args=args
)

latest_only = LatestOnlyOperator(task_id="latest", dag=DAG)

extract = PythonOperator(
task_id="extract", python_callable=extract,  dag=DAG)

extract.set_upstream(latest_only)

它在每个星期一的10AM触发。它于今天(05/06/2019)运行,但预定的日期为2019-04-29 14:00:00 任务实例具有以下日期

execution_date : 2019-04-29T14:00:00+00:00
start_date : 2019-05-06 14:19:48.527488+00:00
end_date : 2019-05-06 14:19:54.225001+00:00

它在上周一(4/29)正确的日期运行良好,并且在历史记录中它现在显示2在4/29运行。可能是什么原因造成的?

2 个答案:

答案 0 :(得分:3)

有一个chapter on Scheduling in the Airflow documentation,其中指出:

  

请注意,如果您以一天的schedule_interval运行DAG,则在2016-01-01T23:59之后不久将触发标记为2016-01-01的运行。换句话说,作业实例所涵盖的时间段结束后便开始启动。

     

让我们重复一遍。计划程序会在开始日期之后(周期结束时)一个schedule_interval运行您的作业。

您正经历着这样的情况:今天(2019-05-06)为最新的“完成”间隔(即从2019-04-29开始的一周)创建了一个DagRun。

这样思考可能会有所帮助:如果要定期处理一些数据,则需要在该时间段内的数据准备就绪后开始处理。

答案 1 :(得分:2)

Airflow在每个间隔的末尾安排一个dag,并以执行时间作为该间隔的开始。因此通常 execution_time = schedule_time-interval

例如,在您的dag中,最后一个间隔是2019-04-29T14:00:00到2019-05-06T14:00:00,并且仅在2019-05-06T14:00:00安排执行执行时间为2019-04-29T14:00:00。这是气流的正常工作。正如您在问题中提到的那样,不确定您的dag是如何在5月6日下午2点之前于2019-04-29T14:00:00运行的。也许您更改了间隔时间或进行了手动触发。