Airflow 气流长时间运行小时DAG';少了几个小时
我的DAG计划每小时运行一次。我从s3源中提取每小时的数据并进行处理。有时这项任务需要一个多小时才能完成。那时,我丢失了一个小时的数据 例如:Airflow 气流长时间运行小时DAG';少了几个小时,airflow,Airflow,我的DAG计划每小时运行一次。我从s3源中提取每小时的数据并进行处理。有时这项任务需要一个多小时才能完成。那时,我丢失了一个小时的数据 例如: 下午1:00 DAG启动并运行2小时。因此,我的下一次DAG运行将参数作为3(3pm)缺少2pm数据。换句话说,我如何调用任务并确保它每小时运行一次,一天24次这似乎是一个完美的使用场景 注意:以下代码片段仅供参考,尚未经过测试 参考资料 这是我的DAG HOUR_PACIFIC = arrow.utcnow().shift(hours=-3
下午1:00 DAG启动并运行2小时。因此,我的下一次DAG运行将参数作为3(3pm)缺少2pm数据。换句话说,我如何调用任务并确保它每小时运行一次,一天24次这似乎是一个完美的使用场景
注意:以下代码片段仅供参考,尚未经过测试
参考资料
- 这是我的DAG
HOUR_PACIFIC = arrow.utcnow().shift(hours=-3).to('US/Pacific').format("HH")
dag = DAG(
DAG_ID,
catchup=False,
default_args=DEFAULT_ARGS,
dagrun_timeout=timedelta(hours=5),
schedule_interval='0 * * * *')
start = DummyOperator(
task_id='Start',
dag=dag)
my_task = EMRStep(emr,
'stg',
HOUR_PACIFIC)
end = DummyOperator(
task_id='End',
dag=dag
)
start >> my_task >> end
您需要为DAG对象传递
catchup=True
。您可以发布一个DAG示例吗?气流中同时出现的DAG没有问题,即,即使出现以下情况,您的DAG在下午2点时也应运行良好DAG@1pm还在跑…@dorvak你说得对。这是我的逻辑。我想每小时运行一次dag,并且我根据当前时间通过一小时。My airflow环境在队列中仅包含4个实例。因此,有时我的任务实例(我将小时作为参数传递)会延迟(由于其他长时间运行的作业)。例子:
HOUR_PACIFIC = arrow.utcnow().shift(hours=-3).to('US/Pacific').format("HH")
dag = DAG(
DAG_ID,
catchup=False,
default_args=DEFAULT_ARGS,
dagrun_timeout=timedelta(hours=5),
schedule_interval='0 * * * *')
start = DummyOperator(
task_id='Start',
dag=dag)
my_task = EMRStep(emr,
'stg',
HOUR_PACIFIC)
end = DummyOperator(
task_id='End',
dag=dag
)
start >> my_task >> end