airflow - Apache气流中的开始日期和预定日期问题
问题描述
我正在使用 Apache 气流,我对预定日期和开始日期有疑问。
我希望每天早上 8:00 UTC 运行一个 dag。所以,我所做的是:
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2020, 12, 7, 10, 0,0),
'email': ['example@emaiil.com'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(hours=5)
}
#never run
dag = DAG(dag_id='id', default_args=default_args, schedule_interval='0 8 * * *',catchup=True)
我上传 dag 的那天是 2020 年 12 月 7 日,我想在 2020 年 12 月 8 日 08:00:00 运行它
我将 start_date 设置为 2020-12-07 的 10:00:00 以避免在 2020-12-07 的 08:00:00 运行它,并且只在第二天触发它,但它不起作用。
然后我所做的是修改开始日期:
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2020, 12, 7, 7, 59,0),
'email': ['example@emaiil.com'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(hours=5)
}
#never run
dag = DAG(dag_id='etl-ca-cpke-spark_dev_databricks', default_args=default_args, schedule_interval='0 8 * * *',catchup=True)
现在开始日期是 dag 应该运行前 1 分钟,实际上,因为 catchup 设置为 True,dag 已在 2020 年 12 月 7 日 08:00:00 触发,但尚未在 2020 年触发-12-08 08:00:00。
为什么?
解决方案
间隔结束时的气流调度任务(参见文档参考)
这意味着当你这样做时:
start_date: datetime(2020, 12, 7, 8, 0,0)
schedule_interval: '0 8 * * *'
第一次运行将2020-12-08
在08:00
+- 开始(取决于资源)
这次运行execution_date
将是:2020-12-07 08:00
下一场比赛将2020-12-09
在08:00
这execution_date
一轮2020-12-08 08:00
。
因为今天是2020-12-08
下一次跑步没有开始,因为它还不是间隔的结束。
推荐阅读
- sql - 如何优化视图?
- php - CakePhp 编辑表单不发送帖子数据
- symfony - 为什么 Symfony 不推荐在 php7 中加载类缓存
- ios - ios11.4升级后没有调用Locationmanager didEnterRegion
- java - 带有语言和地区的 REST API 请求
- oracle - 无法使用 Oracle SQL 开发人员导入 txt 文件
- curl - Dom 从 curl 响应中获取子节点
- c++ - 导入机器人机械臂(6 轴)的连接部件并通过用户输入使每个关节旋转(C++ 代码)
- css - 在 FlatList 中使用溢出
- angular - Angular 6 - Google 登录 - 使用 SocialLoginModule 刷新令牌