Airflow

2nd September 2021 at 11:44am

Airflow 是一个调度工具,主要服务于大数据场景。

在 Shopee 工作时用的是 Airflow 1.10.x 版本。

上手学习时,至少要看完其 架构Dag 文档。

如何确定某次 Dag 运行的 execution date?

Execution date 指的是 DAG 运行时的逻辑时间。比如你的 Dag 代码可能是在 07-08 在机器上运行,但是你想处理的是 07-01 的数据,那么这个场景中的 execution date 是 07-01。Execution date 在 Airflow DAG 文件以 {{ ds }} 传入。

Dag 设置的 调度时间是 3:00 AM,新加坡时区(SGT)。你可以在 UI 上看到某次 Dag 运行时的名字,比如:

其中每次 run 的 execution date 都是 这个时间对应的 Dag 时区的时间,所处在当地日期。比如 backfill_2021-07-08T19:00:00+00:00 中,+00:00 表明它是一个 UTC 时间,那么其对应的 SGT 的时间是 07-09 03:00 AM,因此 execution date 是 07-09。

因此你在选择 backfill 时间范围时,按你的时区来选。比如你希望 backfill 07-01 至 07-03 三天的数据,那么:

  • 开始时间应该小于 SGT 的 07-01 03:00 AM
  • 结束时间应该大于 SGT 的 07-03 03:00 AM

这样 Airflow 会判断出这个时间区间里,有三次命中了调度时间,从而进行调度。

对于调度器调度的运行,比如 07-29 03:00 AM 调度的,它的名字会是 scheduled__2021-07-27T19:00:00+00:00,其对应的 SGT 时间是 07-28 03:00 AM。可以看到 调度器是以 T-1 的方式运行的,即 07-29 运行的任务,execution date 会是前一天 07-28。