初探airflow

airflow是Airbnb开源的data pipeline调度和监控工作流的平台,用于用来创建、监控和调整data pipeline(ETL)。类似的产品有:Linkedin Azkaban

【简述】
Airflow是一种允许工作流开发人员轻松创建、维护和周期性地调度运行工作流(即有向无环图或成为DAGs)的工具。在Airbnb中,这些工作流包括了如数据存储、增长分析、Email发送、A/B测试等等这些跨越多部门的用例。这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,并且提供了钩子使得系统拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于Web的用户界面让您可以可视化管道的依赖关系、监控进度、触发任务等。

【优势】
做ETL的同学可能会经常使用脚本(bash/python)+crontab来运行数据处理任务,虽然方便但是存在很多缺陷:
  • 查看任务执行情况不直观方便,只能登录机器、或者写一个界面/监控
  • 存在依赖关系的任务没办法保证,或者保证的方法成本太高
  • 任务量达到一定量级,任务的管理将极其棘手
当然xxx厂数据同学是非常幸运的,因为我们大部分要处理的数据都是存储在xxx的,运用公司的xxx平台(和airflow有点类似)就可以实现大部分数据处理任务的管理。
但是处理非tdw数据时,就可以参考下airflow。

airflow-任务管理
airflow-任务视图,task依赖关系、执行情况一目了然
airflow-代码预览
此外还支持简易报表展示、email通知、大量拓展插件

【实战】
安装&demo,参考:

【核心组件】
元数据库(原生是sqlite,支持MySQL或Postgres等)
Airflow Web服务器(python+flask+Jinja 2 ,简单易学)
调度器scheduler(scheduler轮询task,触发条件后丢给executor去执行)
executor(分为三种模式:sequenceexecutor、localexecutor、celeryexecutor)
pool(类似tdw应用组,包含若干slot)

【依赖关系的解决】
airflow主要是data pipeline调度和监控工作流的平台,由于其优秀的设计,可以用于应对复杂的依赖问题。
调度系统常常要考虑的依赖问题有:
  • 时间依赖:何时执行任务
  • 环境依赖:执行task所需要的环境,如python版本
  • 任务关系依赖:任务间的父子依赖
  • 资源依赖:当资源达到一定瓶颈时,任务处于等待状态
  • 权限依赖:谁能执行任务
airflow是这样解决这些问题的:
  • 时间依赖:类似crontab,也支持直接使用python的datatime
  • 环境依赖:sequenceexecutor、localexecutor下不需要考虑这个问题(单机),CeleryExecuter下可以使用不同的用户启动Worker,不同的Worker监听不同的Queue。同一worker下的执行环境是一致的。
  • 任务关系依赖:Airflow的核心概念,是DAG(有向无环图),DAG由一个或多个TASK组成。多个Task之间的依赖关系可以很好的用DAG表示完善
  • 资源依赖:任意一个Task指定一个抽象的Pool(类似tdw应用组),每个Pool可以指定一个Slot数。每当一个Task启动时,就占用一个Slot,当Slot数占满时,其余的任务就处于等待状态。
  • 权限依赖:a.web服务器的鉴权,b.CeleryExecuter下可以使用不同的用户启动Worker

【落地场景】
1、开箱即用的ETL调度管理平台(有点类似lhotse)
2、运维/作业管理平台(原生不擅长海量机器作业,不过有mesos插件)
3、调度平台设计(基于python实现的调度系统,设计理念可以用于很多调度平台)



外部资料:

猜你喜欢

转载自blog.csdn.net/u013128262/article/details/70940900