初识Airflow任务调度平台

1.分布式和集群

  • 集群和分布式对比
集群 分布式
一个物理形态 一种工做方式
只要是一堆机器,就能够称为集群,至于它们是否协做干活,这个谁也不知道 一个程序或者系统,只要运行在不一样的机器上,就能够叫分布式(固然,C/S架构也能够叫分布式)
通常是物理集中、统一管理的 不强调物理集中、统一管理
  • 小结

集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;web

分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算是多台)机器上。sql

2.Airflow介绍

Airflow是Airbnb开源的一个用Python编写的调度工具。架构

2.1 Airflow中的做业和任务

  • DAG分布式

    • 概要:DAG(Directed Acyclic Graph)是有向无环图,也称为有向无循环图。在Airflow中,一个DAG定义了一个完整的做业。同一个DAG中的全部Task拥有相同的调度时间。
    • 参数:
      • dag_id: 惟一识别DAG,方便往后管理
      • default_args: 默认参数,若是当前DAG实例的做业没有配置相应参数,则采用DAG实例的default_args中的相应参数
      • schedule_interval: 配置DAG的执行周期,可采用crontab语法
  • Task工具

    • 概要:Task为DAG中具体的做业任务,依赖于DAG,也就是必须存在于某个DAG中。Task在DAG中能够配置依赖关系(固然也能够配置跨DAG依赖,可是并不推荐。跨DAG依赖会致使DAG图的直观性下降,并给依赖管理带来麻烦)。
    • 参数:
      • dag: 传递一个DAG实例,以使当前做业属于相应DAG
      • task_id: 给任务一个标识符(名字),方便往后管理
      • owner: 任务的拥有者,方便往后管理
      • start_date: 任务的开始时间,即任务将在这个时间点以后开始调度

2.2 Airflow的调度时间

  • start_date

在配置中,它是做业开始调度时间。而在谈论执行情况时,它是调度开始时间。日志

  • schedule_interval

调度执行周期。code

  • execution_date

执行时间。在Airflow中称为执行时间,但其实它并非真实的执行时间。cdn


[敲黑板,划重点]server

因此,第一次调度时间:在做业中配置的start_date,且知足schedule_interval的时间点。记录的execution_date为做业中配置的start_date的第一个知足schedule_interval的时间。blog

[举个例子]

假设咱们配置了一个做业的start_date为2019年6月2日,配置的schedule_interval为* 00 12 * * *,那么第一次执行的时间将是2019年6月3日 12点。所以execution_date并非如期字面说的表示执行时间,真正的执行时间是execution_date所显示的时间的下一个知足schedule_interval的时间点。


2.3 Airflow的调度方式

  • 调度方式
    • SequentialExecutor: 顺序调度
    • LocalExecutor: 多进程调度
    • CeleryExecutor: 分布式调度

可是有时候仅仅靠配置做业依赖和调度执行周期并不能知足一些复杂的需求

  • other任务调度方式
      1. 跳过非最新DAG Run(做业中出现故障,一段时间后恢复)
      1. 当存在正在执行的DAG Run时,跳过当前DAG Run(做业执行时间过长,长到下一次做业开始)
    • 3)Sensor的替代方案(Airflow中有一类Operator被称为Sensor,Sensor能够感应预先设定的条件是否知足,当知足条件后Sensor做业变为Success使得下游的做业能够执行。弊端是,若是上游做业执行3个小时,那么会占用worker三个小时不释放,资源浪费。

2.4 Airflow的服务构成

  • webserver

Airflow 提供了一个可视化的 Web 界面。启动 WebServer 后,就能够在 Web 界面上查看定义好的 DAG 并监控及改变运行情况。也能够在 Web 界面中对一些变量进行配置。

  • worker

通常来讲咱们用 Celery Worker 来执行具体的做业。Worker 能够部署在多台机器上,并能够分别设置接收的队列。当接收的队列中有做业任务时,Worker 就会接收这个做业任务,并开始执行。Airflow 会自动在每一个部署 Worker 的机器上同时部署一个 Serve Logs 服务,这样咱们就能够在 Web 界面上方便的浏览分散在不一样机器上的做业日志了。

  • scheduler

整个 Airflow 的调度由 Scheduler 负责发起,每隔一段时间 Scheduler 就会检查全部定义完成的 DAG 和定义在其中的做业,若是有符合运行条件的做业,Scheduler 就会发起相应的做业任务以供 Worker 接收。

  • flower

Flower 提供了一个可视化界面以监控全部 Celery Worker 的运行情况。这个服务并非必要的。

2.5 Airflow的原始架构

airflow-origin-structure

3.基于Docker的Airflow分布式搭建

3.1 部署结点

  • Scheduler、WebServer、Flower: 10.21.0.192

  • Worker: 10.21.0.190、10.21.0.19一、10.21.0.193

  • RabbitMQ(Celry broker ): 10.21.0.192

  • Mysql(backend): 10.21.0.235

3.2 Docker文件目录

airflow-origin-structure

3.3 架构图

airflow-origin-structure
相关文章
相关标签/搜索