Airflow Apache中的开始日期和计划日期有问题
我正在使用Apache airflow,我对计划日期和开始日期有问题 我想让dag每天在UTC上午8:00运行。所以,我所做的是:Airflow Apache中的开始日期和计划日期有问题,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我正在使用Apache airflow,我对计划日期和开始日期有问题 我想让dag每天在UTC上午8:00运行。所以,我所做的是: 默认参数={ “所有者”:“气流”, “依赖于过去”:False, “开始日期”:日期时间(2020,12,7,10,0,0), '电子邮件':['example@emaiil.com'], “失败时发送电子邮件”:True, “重试时发送电子邮件”:False, “重试”:1, “重试延迟”:时间增量(小时=5) } #永远不要跑 dag=dag(dag_id='
默认参数={
“所有者”:“气流”,
“依赖于过去”:False,
“开始日期”:日期时间(2020,12,7,10,0,0),
'电子邮件':['example@emaiil.com'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:False,
“重试”:1,
“重试延迟”:时间增量(小时=5)
}
#永远不要跑
dag=dag(dag_id='id',default_args=default_args,schedule_interval='0 8***',catchup=True)
我上传dag的那天是2020-12-07,我想在2020-12-08的08:00:00运行它
我将开始日期设置为2020-12-07的10:00:00,以避免在2020-12-07的08:00:00运行它,并且只在第二天触发它,但它不起作用
我当时所做的是修改开始日期:
默认参数={
“所有者”:“气流”,
“依赖于过去”:False,
“开始日期”:日期时间(2020,12,7,7,59,0),
'电子邮件':['example@emaiil.com'],
“失败时发送电子邮件”:True,
“重试时发送电子邮件”:False,
“重试”:1,
“重试延迟”:时间增量(小时=5)
}
#永远不要跑
dag=dag(dag_id='etl-ca-cpke-spark_dev_databricks',default_args=default_args,schedule_interval='0 8***',catchup=True)
现在,开始日期是dag运行前1分钟,事实上,由于catchup设置为True,因此在2020-12-07的08:00:00触发了dag,但在2020-12-08的08:00:00没有触发
为什么?间隔(结束时的气流计划任务) 也就是说,当您这样做时:
start_date: datetime(2020, 12, 7, 8, 0,0)
schedule_interval: '0 8 * * *'
第一次运行将于2020-12-08
于08:00
+-(取决于资源)
本次运行的执行日期为:2020-12-07 08:00
下一次跑步将于2020-12-09
于08:00
本次运行日期为2020-12-08 08:00
由于今天是
2020-12-08
下一次跑步没有开始,因为它还不是区间的终点。那么如果我想在2020-12-08
开始跑步08:00
之后每天在08:00
开始跑步,我应该在开始日期设置开始日期:2020-12-06 08:00
?我不明白为什么如果开始日期是2020-12-07 08:00
,它不会在2020-12-07 08:00和2020-12-08:00上运行。你在解释start\u date
就像cronjob一样,你可以指定时间和开始日期。这不是气流的工作原理。气流采用开始日期+间隔,在此期间结束后开始运行。这背后的逻辑是,当您编写希望在间隔结束时通过窗口->今天运行的ETL时,您希望处理昨天的数据。然后,如果我想修改dag,从明天开始每天08:00:00开始计划,那么应该设置什么开始日期?使用相同的逻辑。运行在间隔结束时开始,因此start_date=datetime(2020,12,8,8,0,0)
和08***
的间隔将在2020-12-09 08:00结束,此时第一次运行将开始。请注意,此运行的执行日期为2020-12-08 08:00