[译] Airflow: 一个工做流程管理平台

出自 Maxime Beaucheminhtml

Airbnb 是一个快速增加的、数据启示型的公司。咱们的数据团队和数据量都在快速地增加,同时咱们所面临的挑战的复杂性也在同步增加。咱们正在扩张的数据工程师、数据科学家和分析师团队在使用 Airflow,它是咱们搭建的一个能够快速推动工做,保持发展优点的平台,由于咱们能够本身编辑、监控和改写 数据管道前端

今天,咱们很是自豪地宣布咱们要 开源共享 咱们的工做流程管理平台:Airflowpython

github.com/airbnb/airf…android


有向无环图(DAGs)呈绽开之势

当与数据打交道的工做人员开始将他们的流程自动化,那么写批处理做业是不可避免的。这些做业必须按照一个给定的时间安排执行,它们一般依赖于一组已有的数据集,而且其它的做业也会依赖于它们。即便你让好几个数据工做节点在一块儿工做很短的一段时间,用于计算的批处理做业也会很快地扩大成一个复杂的图。如今,若是有一个工做节奏快、中型规模的数据团队,并且他们在几年以内要面临不断改进的数据基础设施,而且手头上还有大量复杂的计算做业网络。那这个复杂性就成为数据团队须要处理,甚至深刻了解的一个重要负担。ios

这些做业网络一般就是 有向无环图DAGs),它们具备如下属性:git

  • 已排程: 每一个做业应该按计划好的时间间隔运行
  • 关键任务: 若是一些做业没有运行,那咱们就有麻烦了
  • 演进: 随着公司和数据团队的成熟,数据处理也会变得成熟
  • 异质性: 现代化的分析技术栈正在快速发生着改变,并且大多数公司都运行着好几个须要被粘合在一块儿的系统

每一个公司都有一个(或者多个)

工做流程管理 已经成为一个常见的需求,由于大多数公司内部有多种建立和调度做业的方式。你老是能够从古老的 cron 调度器开始,而且不少供应商的开发包都自带调度功能。下一步就是建立脚原本调用其它的脚本,这在短时间时间内是能够工做的。最终,一些为了解决做业状态存储和依赖的简单框架就涌现了。github

一般,这些解决方案都是 被动增加 的,它们都是为了响应特定做业调度需求的增加,而这一般也是由于现有的这种系统的变种连简单的扩展都作不到。同时也请注意,那些编写数据管道的人一般不是软件工程师,而且他们的任务和竞争力都是围绕着处理和分析数据的,而不是搭建工做流程管理系统。web

鉴于公司内部工做流程管理系统的成长老是比公司的需求落后至少一代,做业的编辑、调度和错误排查之间的 摩擦 制造了大量低效且使人沮丧的事情,这使得数据工做者和他们的高产出路线背道而驰。shell

Airflow

在评审完开源解决方案,同时听取 Airbnb 的员工对他们过去使用的系统的看法后,咱们得出的结论是市场上没有任何能够知足咱们当前和将来需求的方案。咱们决定搭建一个崭新的系统来正确地解决这个问题。随着这个项目的开发进展,咱们意识到咱们有一个极好的机会去回馈咱们也极度依赖的开源社区。所以,咱们决定依照 Apache 的许可开源这个项目。数据库

这里是 Airbnb 的一些靠 Airflow 推进的处理工序:

  • 数据仓储: 清洗、组织规划、数据质量检测而且将数据发布到咱们持续增加的数据仓库中去
  • 增加分析: 计算关于住客和房主参与度的指标以及增加审计
  • 试验: 计算咱们 A/B 测试试验框架的逻辑并进行合计
  • 定向电子邮件: 对目标使用规则而且经过群发邮件来吸引用户
  • 会话(Sessionization): 计算点击流和停留时间的数据集
  • 搜索: 计算搜索排名相关的指标
  • 数据基础架构维护: 数据库抓取、文件夹清理以及应用数据留存策略...

架构

就像英语是商务活动常用的语言同样,Python 已经稳固地将本身树立为数据工做的语言。Airflow 从建立之初就是用 Python 编写的。代码库可扩展、文档齐全、风格一致、语法过检而且有很高的单元测试覆盖率。

管道的编写也是用 Python 完成的,这意味着经过配置文件或者其余元数据进行动态管道生成是与生俱来的。“配置即代码” 是咱们为了达到这个目的而坚守的准则。虽然基于 yaml 或者 json 的做业配置方式可让咱们用任何语言来生成 Airflow 数据管道,可是咱们感受到转化过程当中的一些流动性丧失了。可以内省代码(ipython!和集成开发工具)子类和元程序而且使用导入的库来帮助编写数据管道为 Airflow 增长了巨大的价值。注意,只要你能写 Python 代码来解释配置,你仍是能够用任何编程语言或者标记语言来编辑做业。

你仅需几行命令就可让 Airflow 运行起来,可是它的完整架构包含有下面这么多组件:

  • 做业定义,包含在源代码控制中。
  • 一个丰富的 命令行工具 (命令行接口) 用来测试、运行、回填、描述和清理你的有向无环图的组成部件。
  • 一个 web 应用程序,用来浏览有向无环图的定义、依赖项、进度、元数据和日志。web 服务器打包在 Airflow 里面而且是基于 Python web 框架 Flask 构建的。
  • 一个 元数据仓库,一般是一个 MySQL 或者 Postgres 数据库,Airflow 能够用它来记录任务做业状态和其它持久化的信息。
  • 一组 工做节点,以分布式的方式运行做业的任务实例。
  • 调度 程序,触发准备运行的任务实例。

可扩展性

Airflow 自带各类与 Hive、Presto、MySQL、HDFS、Postgres 和 S3 这些经常使用系统交互的方法,而且容许你触发任意的脚本,基础模块也被设计得很是容易进行扩展。

Hooks 被定义成外部系统的抽象而且共享一样的接口。Hooks 使用中心化的 vault 数据库将主机/端口/登陆名/密码信息进行抽象而且提供了可供调用的方法来跟这些系统进行交互。

操做符 利用 hooks 生成特定的任务,这些任务在实例化后就变成了数据流程中的节点。全部的操做符都派生自 BaseOperator 而且继承了一组丰富的属性和方法。三种主流的操做符分别是:

  • 执行 动做 的操做符, 或者通知其它系统去执行一个动做
  • 转移 操做符将数据从一个系统移动到另外一个系统
  • 传感器 是一类特定的操做符,它们会一直运行直到知足了特定的条件

执行器(Executors) 实现了一个接口,它可让 Airflow 组件(命令行接口、调度器和 web 服务器)能够远程执行做业。目前,Airflow 自带一个 SequentialExecutor(用来作测试)、一个多线程的 LocalExecutor、一个使用了 Celery 的 CeleryExecutor 和一个超棒的基于分布式消息传递的异步任务队列。咱们也计划在不久后开源 YarnExecutor。

一个绚丽的用户界面

虽然 Airflow 提供了一个丰富的命令行接口,可是最好的工做流监控和交互办法仍是使用 web 用户接口。你能够容易地图形化显示管道依赖项、查看进度、轻松获取日志、查阅相关代码、触发任务、修正 false positives/negatives 以及分析任务消耗的时间,同时你也能获得一个任务一般在天天何时结束的全面视图。用户界面也提供了一些管理功能:管理链接、池和暂停有向无环图的进程。

锦上添花的是,用户界面有一个 Data Profiling 区,可让用户在注册好的链接上进行 SQL 查询、浏览结果集,同时也提供了建立和分享一些简单图表的方法。这个制图应用是由 HighchartsFlask Admin 的增删改查接口以及 Airflow 的 hooks库混搭而成的。URL 参数能够传递给你图表中使用的 SQL,Airflow 的宏是经过 Jinja templating 的方式工做的。有了这些特性和查询功能,Airflow 用户能够很容易的建立和分享结果集和图表。

一种催化剂

使用 Airflow 以后,Airbnb 的员工进行数据工做的生产率和热情提升了好几倍。管道的编写也加速了,监控和错误排查所花费的时间也显著减小了。更重要的是,这个平台容许人们从一个更高级别的抽象中去建立可重用的模块、计算框架以及服务。

说得够多的了!

咱们已经经过一个启发式的教程把试用 Airflow 变得极其简单。想看到示例结果也只须要执行几个 shell 命令。看一看 Airflow 文档快速上手教程部分,你能够在几分钟以内就让你的 Airflow web 程序以及它自带的交互式实例跑起来!

github.com/airbnb/airf…

airbnb.io 上查看咱们全部的开源项目并 在 Twitter 上关注咱们:@AirbnbEng + @AirbnbData

若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索