气流介绍

  

气流介绍

  

一、气流是什么

  
  

   气流是一个编排,调度和监控工作流的平台,由Airbnb开源,现在在Apache软件基金会孵化.airflow将工作流编排为由任务组成的装饰边(有向无环图),调度器在一组工人上按照指定的依赖关系执行任务。同时,气流提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且气流提供了监控和报警系统。
   气流的调度依赖于crontab命令,与crontab相比气流可以直观的看到任务执行情况,任务之间的逻辑依赖关系,可以设定任务出错时邮件提醒,可以查看任务执行日志。

  

而crontab命令管理的方式存在以下几方面的弊端:
    1,在多任务调度执行的情况下,难以理清任务之间的依赖关系;
    2,不便于查看当前执行到哪一个任务,
    3,任务执行失败时不便于查看执行日志,也即不方便定位报错的任务和错误原因,
    4,不便于查看调度流下每个任务执行的起止消耗时间,这对于优化任务作业是非常重要的;
    5、不便于记录历史调度任务的执行情况,而这对于优化作业和错误排查是很重要的;

     
1,优劣势分析
           未使用气流   使用气流               需要自己添加调度代码,调试复杂,功能单一,缺乏整体调度能力   框架调度,简单易用,更稳定,功能全面,可以整体调度         缺乏图形化能力,给任务的新增,排查等操作带来很多困难。特别是当任务较多,结构复杂的时候   内置树状图和流程图,清晰明了的展现任务拓扑结构         需要自己添加任务实时监测代码   任务实时状态返回网页界面,方便管理和查看         任务的各种操作大多需要编码或命令行完成,不够高效   常见操作方式转化为图形化界面,高效清晰         需要手动分离调度和业务代码   调度和业务代码分离,减少耦合性,方便运维和迭代            
  

除了以上的优点,工程实践中有一个不足就是分布式部署有点麻烦,容易出错。

     

二,气流中的作业和任务

  
1, DAG h5>   

概要:DAG(有向无环图)是有向无环图,也称为有向无循环图。在气流中,一个DAG定义了一个完整的作业。同一个DAG中的所有任务拥有相同的调度时间。

  

参数:   

      <李> dag_id:唯一识别DAG,方便日后管理李   <李> default_args:默认参数,如果当前DAG实例的作业没有配置相应参数,则采用DAG实例的default_args中的相应参数   <李> schedule_interval:配置DAG的执行周期,可采用crontab语法   
     
2,任务   
  

概要:任务为DAG中具体的作业任务,依赖于DAG,也就是必须存在于某个DAG中.Task在DAG中可以配置依赖关系(当然也可以配置跨DAG依赖,但是并不推荐。跨DAG依赖会导致DAG图的直观性降低,并给依赖管理带来麻烦)。

  

参数:   

      <李> dag:传递一个dag实例,以使当前作业属于相应dag李   <李> task_id:给任务一个标识符(名字),方便日后管理李   <李>主:任务的拥有者,方便日后管理李   <李> start_date:任务的开始时间,即任务将在这个时间点之后开始调度   
     

三、气流的调度时间

  
1, start_date h5>   

在配置中,它是作业开始调度时间。而在谈论执行状况时,它是调度开始时间。

     
2, schedule_interval h5>   

调度执行周期。

     
3, execution_date h5>   

执行时间。在气流中称为执行时间,但其实它并不是真实的执行时间。

  

[敲黑板,划重点]
所以,第一次调度时间:在作业中配置的start_date,且满足schedule_interval的时间点。记录的execution_date为作业中配置的start_date的第一个满足schedule_interval的时间。

  

(举个例子]
假设我们配置了一个作业的start_date为2019年6月2日,配置的schedule_interval为 00 12 ,那么第一次执行的时间将是2019年6月3日12点,因此execution_date并不是如期字面说的表示执行时间,真正的执行时间是execution_date所显示的时间的下一个满足schedule_interval的时间点。

     

气流介绍