airflow简析(一)

##airflow简析(一) airflow是airbnb开源的用于构建工作流的框架。开发者用python脚本来定义DAG,airflow负责调度和监控。开发简单,后台功能丰富。

###scheduler调度器

  1. collect dags 遍历dags目录下面的.py文件,导入模块,找出定义的dag对象保存到dag列表dagbag
  2. 进入循环
    • 优先处理处于排队中的task实例
    • 默认每10次循环检查一次dags目录,加载更新的dag,否则,只加载dagbag中更新的dag
    • 遍历dagbag中的dag,开始调度
      • 实例化一个对应执行日期的dagrun,如果dag是第一次执行并且没有执行过的task,则从dag定义的start_date开始调度,如果dag是第一次运行但是有执行过的属于这个dag的task,会从task最后执行时间前5天开始调度;如果dag不是第一次执行,则从上一次的执行日期开始,下次执行日期是(开始日期+调度间隔),并且在下下次执行日期(下次执行日期+调度间隔)到来之后才调度。也就是,开始日期是2015-10-01,调度间隔是1天,下次执行日期是2015-10-02,然后这个任务会在 2015-10-03 调度执行。
      • 对于每个dag,查找状态为running的实例dagrun,每个dagrun是dag在某个执行日期的实例,对于构成dag的每个task,实例化task instance(task对应某个执行日期的实例),判断是否能执行,例如依赖的上级task有没有成功等,如果可以执行,则组装一条airflow run命令放入队列中。
      • 处理SLA miss,如果task在配置的预计执行完成日期没有执行成功,会发邮件通知。
      • 处理僵尸进程,即没有心跳的执行状态的job。
      • executor异步执行队列中的命令
      • 检查当前调度进程(SchedulerJob)数据库中的状态,是SHUTDOWN就kill掉自己,否则更新心跳
      • sleep直到与上次心跳间隔为scheduler_heartbeat_sec,进入下一次循环

###executor执行器

  • 三种选择
    • Sequential executor 单进程
    • local executor 多进程,通过multiprocessing库预先建立worker池
    • celery 分布式,利用celery库
  • 执行过程
    • 从调度任务队列拿task
    • 开子进程用shell执行task的命令,父进程阻塞等待子进程完成
    • 执行状态(SUCCESS/FAILED)放入结果队列

转载于:https://my.oschina.net/xiaorong919/blog/533698

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值