Airflow 气流长时间运行小时DAG';少了几个小时

Airflow 气流长时间运行小时DAG';少了几个小时,airflow,Airflow,我的DAG计划每小时运行一次。我从s3源中提取每小时的数据并进行处理。有时这项任务需要一个多小时才能完成。那时,我丢失了一个小时的数据 例如: 下午1:00 DAG启动并运行2小时。因此,我的下一次DAG运行将参数作为3(3pm)缺少2pm数据。换句话说,我如何调用任务并确保它每小时运行一次,一天24次这似乎是一个完美的使用场景 注意:以下代码片段仅供参考,尚未经过测试 参考资料 这是我的DAG HOUR_PACIFIC = arrow.utcnow().shift(hours=-3

我的DAG计划每小时运行一次。我从s3源中提取每小时的数据并进行处理。有时这项任务需要一个多小时才能完成。那时,我丢失了一个小时的数据

例如:
下午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