Airflow趟坑记

Airflow Scheduler调度的坑:

官网上关于调度是这么说的

Note that if you run a DAG on a schedule_interval of one day, the run stamped 2016-01-01 will be trigger soon after 2016-01-01T23:59. In other words, the job instance is started once the period it covers has ended.

看第一遍可能以为Airflow的调度是往后延一个周期的,比如一个每日执行的任务,会在1月2日0点执行1月1日的任务。而实际上,并非如此。

Airflow什么时候开始执行任务?实际上是从dag的start_date + schedule_interval开始的,如果schedule_interval设成@daily,那么会从start_date之后的一天开始。
这个实际上在他的FAQ里面提到了:

Is your start_date set properly? The Airflow scheduler triggers the task soon after the start_date + scheduler_interval is passed.

注意我理解这里的start_date并非dag参数里面的start_date,比如今天是8月1日,参数的start_date设成了7月1日,那么Airflow会首先去补7月1日-7月31日的数据,补完以后,拿来计算最新的dag run的日期就变成了8月1日,其实这里面的start_date是指最近的执行日期,如果是8月1日,首次任务会在8月2日00:00:00后执行。

但是如果schedule_interval设成cron表达式会怎样?可能我们会设成每天的15:00:00启动dag,但是当天的15:00:00是不会启动的,即使过了15:00:00到了16:00:00也不会去backfill这个dag。

因为Airflow会把这个cron表达式解释为shedule_interval为1天,所以会在第二天才启动。其实跟设置成@daily的效果一样的。但是具体是从00:00:00启动还是从15:00:00启动这个尚待考证。

那么如果想当天就启动一个dag应该怎么做?答案就是把schedule_interval设短一点。如果还想用cron,那么就设置成*/15 15 * * *这样的形式。dag会在15:00-16:00间每隔15分钟跑一次,程序逻辑里面就多判重一下,没办法,谁叫Airflow这么坑呢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文将介绍 Airflow 这一款优秀的调度工具。主要包括 Airflow 的服务构成、Airflow 的 Web...
    a7f00a9019ae阅读 63,921评论 6 42
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,119评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,331评论 19 139
  • SwiftDate概况 从Swift发布起,我们就没有放弃使用Swift。 当然,我们希望在项目能够轻松自如地管理...
    Mee_Leo阅读 10,321评论 1 13
  • 什么是Redis 基于键值对的内存数据库。 Redis 的优势 基于内存,所以数据读写快。所有数据都存放在内存中底...
    苏近之2017阅读 343评论 0 1

友情链接更多精彩内容