airflow.cfg中的设置catchup_by_default = False似乎不起作用。此外,向DAG添加catchup = False也不起作用。
此处是重现此问题的方法。我总是从运行airflow resetdb
开始。一旦我取消暂停,任务就开始回填。
这是dag的设置。我只是在使用tutorial example。
default_args = {
"owner": "airflow",
"depends_on_past": False,
"start_date": datetime(2018, 9, 16),
"email": ["airflow@airflow.com"],
"email_on_failure": False,
"email_on_retry": False,
"retries": 1,
"retry_delay": timedelta(minutes=5),
}
dag = DAG("tutorial", default_args=default_args, schedule_interval=timedelta(1), catchup=False)
答案 0 :(得分:2)
就像{d3b}中提到的@dlamblin一样,Airflow也会在最近的有效间隔内创建一个DagRun。 catchup=False
将指示调度程序仅为DAG间隔系列的最新实例创建DAG运行。
尽管将timedelta
的{{1}}而不是CRON表达式或CRON预设使用docs。 Airflow Master中的BUG已修复此问题。我们将通过此修复程序发布Airflow 1.10.11。
答案 1 :(得分:1)
要清楚的是,如果您启用了当现在时间为2018-10-22T9:00:00.000EDT(即2018-10-22T13:00:00.000Z)时指定的DAG,它将是在2018-10-22T13:00:00.000Z之后的某个时间开始,其运行日期标记为2018-10-21T00:00:00.000Z。
这不是从开始日期开始回填,但是没有任何先前的运行,它会“追赶”最近完成的有效期;我不确定在Airflow中为什么会出现这种情况,但是documented catchup=False
意味着要创建一个最近有效期的单次运行。
如果dagrun运行日期进一步使您感到困惑,请记住运行日期是execution_date
,它是间隔时间段的开始。该间隔的数据仅在间隔周期结束时才完全可用,但是气流被设计为在周期开始时通过。
然后下一次运行将在2018-10-23T00:00:00.000Z之后的某个时间开始,其中execution_date
设置为2018-10-22T00:00:00.000Z。>
如果在22日或之后的日期获得了比21日更早的运行日期,或计划的多次运行,则catchup=False
是无效的。但是在v1.10或v1-10-stable分支中没有其他报告。
答案 2 :(得分:0)
我知道这个线程有点旧。但是,在catch_up_default = False
中设置airflow.cfg
确实阻止了airflow
替我回填。
(我的Airflow
版本是1.10.12)
我很遗憾默认情况下未将此配置设置为False
。这个事实以及dag在schedule_interval
之后开始start_date
的事实,是困扰Airflow初学者的两个最令人困惑的事情。
我第一次使用Airflow
时,我浪费了整个下午的时间,试图弄清为什么计划每5分钟运行一次的测试任务会快速连续地运行(例如每5-6秒运行一次)。我花了一段时间才意识到它在起作用backfill
。