是否可以同时进行气流回填和调度?

Posted

技术标签:

【中文标题】是否可以同时进行气流回填和调度?【英文标题】:Is it possible to have airflow backfill and scheduling at the same time? 【发布时间】:2019-08-11 21:57:37 【问题描述】:

我的情况是,我开始每天在某个时间安排一些数据,我必须为这些数据创建 ETL。

同时,当我仍在创建 DAG 以在 Airflow 中安排任务时。数据每天都在不断到达。因此,当我从今天开始运行我的 DAG 时,我想每天安排它,并且还想回填过去几天我在创建 DAG 时错过的所有数据。

我知道如果我将 start_date 作为数据开始到达的日期,气流将从该日期开始回填,但在这种情况下不会,我的 DAG 将始终落后于当天?如何同时实现回填和调度?我是否需要为回填和调度创建单独的 DAG/任务?

【问题讨论】:

【参考方案1】:

您需要考虑几件事情。 1.你的每日数据是独立的还是下一次运行依赖于上一次运行?

如果数据依赖于之前的状态,您可以在 Airflow 中运行回填。

回填在 Airflow 中的工作原理是什么? Airflow 为您提供了运行过去 DAG 的便利。运行过去 DAG 的过程称为回填。 Backfill 的过程实际上让 Airflow 从一开始就为所有 DAG 设置了一些状态。

我知道如果我把 start_date 作为数据的起始日期 开始到达的气流将从该日期开始回填,但是 在那种情况下,我的 DAG 不会总是落后于当前日期吗?

是的,设置过去的 start_date 是回填气流的正确方法。 不,如果您使用 celery 执行器,作业将并行运行,最终会赶上当天,显然取决于您的执行时间。

如何同时实现回填和调度?难道我 需要为回填和调度创建单独的 DAG/任务?

您不需要做任何额外的事情来同时实现调度和回填,Airflow 将根据您的start_date 处理这两者

最后,如果这个活动是我推荐的一次性任务,你可以(手动)离线处理你的数据到气流,这会让你对执行有更多的控制。 然后将回填的任务标记为成功或低于

    像这样运行气流回填命令:airflow backfill -m -s "2016-12-10 12:00" -e "2016-12-10 14:00" users_etl

此命令将为从 12:00 PM 到 02:00 PM 的所有计划创建任务实例,并将其标记为成功,而根本不执行任务。确保将 depends_on_past 配置设置为 False,这将使此过程更快。完成后,将其设置回True

或者

    start_date 设置为当前日期更简单

【讨论】:

以上是关于是否可以同时进行气流回填和调度?的主要内容,如果未能解决你的问题,请参考以下文章

气流回填澄清

气流回填澄清

如何防止气流回填 dag 运行?

如果任何任务失败,气流回填将停止

如何防止气流回填dag运行?

气流:如何删除 DAG?