Airflow的scheduling的start_date和schedular_interval

问题出现

  Airflow是一个定时调度框架,最近公司需要用到airflow进行对脚本程序的调度。所以公司搭建了一个Airflow的平台,现在有一个任务需要在每天的18点02分执行,那么我们怎么做呢?
我们编辑了一个Airflowpython文档,(具体的代码就不放出来了)里面的内容大致如下:

在这个图里面,关注两个变量名称
* start_date
* schedule_intervel
现在需求是从2020-06-18 18:02:00开始程序的第一次执行,此后,程序将会在每一天的18:02:00这个时间点执行。
在实现这个需求之前,我们先做了一个针对Airflow的测试,测试的目的是想要验证一下Airflow能否正常的去执行。

测试过程

&emsp:&emsp:在开始之前,我们准备了一个shell脚本内容如下:

date >> mydate.txt

在北京时间为:2020-06-18 15:16:00的时刻下(当前时间2020-06-18 15:14:00),我们想要让这个shell脚本第一次执行,并且每五分钟执行一次。
当时的参数如下:
start_date设置为:datetime(2020,6,18,15,16)
scheduler_interval设置为:*/5 * * *
  当时的想法是:程序在start_date即2020年6月18日的15点16分,进行第一次的任务调度。即:2020-06-18 15:16:00的时候进行第一次的任务调度。因为设置了调度周期scheduler_interval所以,程序会每五分钟调度一次,即在2020-06-18 15:21:00的时候开始进行第二次调度。之后每五分钟执行一次。

注意
  上面的执行逻辑是错误的。在我们实际的测试之后发现,该程序第一次的运行时间,为2020-06-18 15:25:00 这与上述我期望的第一次的执行时间(2020-06-18 15:16:00)不同。所以问题出现了,start_date设置的时间不是程序第一次启动的时间。

探究过程

  查阅了官方的文档,并且经过一系列的测试。得出了结论:

  • 第一次运行的时间并不能用start_date来理解,应该用后面的scheduler_interval来理解
    scheduler_interval用的是cron表达式,在我的测试例子中,cron表达式为:*/5 * * *
    表达的是每5分钟运行一次。所以,在2020年6月18日15点的时间区间里面,程序执行的时间点为:

    时间表(起个临时名字)
    2020-06-18 15:00:00
    2020-06-18 15:05:00
    2020-06-18 15:10:00
    2020-06-18 15:15:00
    2020-06-18 15:20:00
    2020-06-18 15:25:00
    2020-06-18 15:30:00
    . . .
    2020-06-18 15:50:00
    2020-06-18 15:55:00
    

    而不是期望的start_date+n * scheduler_inveral (n ∈N)

    例如 start_date = 2020-06-18 15:16:00
    第二次执行时间:2020-06-18 15:21:00
    第三次执行时间:2020-06-18 15:26:00
    (然而事实不是这样的,哦豁,摊手,上面的时间点就没在上面的时间表里面)
    

    当时我们处于2020-06-18 15:14:00这个时间点,设置的start_date2020-06-18 15:16:00,可以看到离2020-06-18 15:16:00这个时间点最近的执行时间是2020-06-18 15:20:00,然而第一次执行的时间点是2020-06-18 15:25:00,(下面解释为啥)

  • Airflow调度程序的时候,程序第一次运行的时间为:start_date加上一个周期的scheduler_interval
      当设置的start_date2020-06-18 15:16:00加上一个周期时间5分钟,时间变为2020-06-18 15:21:00时间表, 在未来离这个时间最近时间点为:2020-06-18 15:25:00,所以我测试的第一次执行的时间为:2020-06-18 15:25:00
      接下来我们测试另外一个脚本:
        当前现实时间:2020-06-18 15:44:00
        start_date:2020-06-18 15:46:00
        schedular_interval:*/2 * * * *
      这么做的目的是因为schedular_interval为2分钟执行一次,start_date刚好卡在这个点上,能否在这个start_date点执行,即2020-06-18 15:46:00进行程序的第一次执行。
    然而它第一次的执行时间为:2020-06-18 15:48:00,也印证了Airflow调度程序的时候第一次执行的时间为:start_date+schedular_interval

结论

  Airflow的官网例子中,start_date有很多都设置为了days_ago(2)(适用于调度周期在天以内的,时间的周期调度主要靠cron表达来判断,所以cron表达式很重要。另外的话,记住程序的第一次调度时间为start_date+schedular_interval
  如果大佬们有啥其他的见解,请在下方留言。共同学习,共同进步,谢谢。

AirFlow的Scheduling的start_date解释相关推荐

  1. Airflow搭建与使用

    Airflow 是一个编排.调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化.Airflow 将workflow编排为由tasks ...

  2. 大数据调度平台Airflow(五):Airflow使用

    目录 Airflow使用 一.Airflow调度Shell命令 1.首先我们需要创建一个python文件,导入需要的类库 2.实例化DAG 3.定义Task 4.设置task依赖关系 5.上传pyth ...

  3. airflow mysql_Airflow 使用及原理分析

    Airflow 入门及使用 什么是 Airflow?Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台. Airflow 是通过 DAG(Dire ...

  4. Airflow使用入门指南

    Airflow能做什么 关注公众号, 查看更多 http://mp.weixin.qq.com/s/xPjXMc_6ssHt16J07BC7jA Airflow是一个工作流分配管理系统,通过有向非循环 ...

  5. 【AIRFLOW】CROSS DAG 实例

    Cross DAG (暂时没有时间详细解释里面的内容) ExternalTaskSensor ExternalTaskMarker https://airflow.apache.org/docs/ap ...

  6. 大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

    目录 Airflow分布式集群搭建及测试 一.节点规划 二.airflow集群搭建步骤 1.在所有节点安装python3.7 2.在所有节点上安装airflow 三.初始化Airflow 1.每台节点 ...

  7. Airflow安装部署

    Airflow安装部署 新闻信息是通过爬虫获取,使用scrapy框架进行爬虫任务:使用airflow工作流监控平台对爬虫任务进行管理.监控(可使用CeleryExecutor分布式,也可使用Local ...

  8. 《强化学习周刊》第32期:上海交大华为 | 可解释强化学习研究综述

    No.32 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  9. [译] Robinhood 为什么使用 Airflow

    原文地址:Why Robinhood uses Airflow 原文作者:Vineet Goel 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:cf020 ...

最新文章

  1. ThinkPHP框架整合phpqrcode生成二维码DEMO
  2. C# WinForm程序中强制退出程序以及启动程序
  3. .Net线程问题解答
  4. 20应用统计考研复试要点(part10)--应用多元分析
  5. 计算机学科的三大科学形态,华中科技大学 计算机科学与技术方法论 3计算学科中的三个学科形态.ppt...
  6. (JAVA)StringBuffer类
  7. python_9(模块补充)
  8. 创建一个简单的数据库
  9. mark点Z3学习资料整理
  10. 量化交易 交易流程与框架
  11. c语言如何画函数图形,c语言绘制函数曲线
  12. Cocos2d-x_CCSprite(精灵类)介绍
  13. [英语语法]词法之代词
  14. 基于android平台的感光设计,基于Android手机摄像头的可见光通信技术研究
  15. 纯js实现减速滚动置顶效果
  16. 上海电气“星云智汇”工业互联网平台
  17. ExtJS初级教程之ExtJS Tree(一)
  18. 计算机带给我们的改变英语作文,技术正改变我们的生活(Technology Is Changing Our Lives)...
  19. YGG SEA与Solana Ventures达成合作,为东南亚的游戏开发注入活力
  20. 青蛙跳台阶问题(斐波拉契数列、动态规划)

热门文章

  1. halcon机器视觉之玩转车牌识别-超人视觉罗超
  2. Open CASCADE Technology(OCCT)概述
  3. Springboot过滤xss
  4. xlinx芯片JTAG烧录
  5. 联想服务器如何重装win 2012系统,联想电脑如何重装win10操作系统
  6. 计算机专业的论文的格式,计算机专业毕业论文格式范例
  7. [轻量化语义分割] Rethinking BiSeNet For Real-time Semantic Segmentation(CVPR2021)
  8. 迷雾之夏服务器维护,迷雾之夏攻略大全 全关卡通关攻略[多图]
  9. NB-IoT窖井井盖解决方案
  10. 【转】FSB\QPI\DMI总线的区别