Airflow: 一个工作流程管理平台

Airbnb 是一个快速增长的、数据启示型的公司。我们的数据团队和数据量都在快速地增长,同时我们所面临的挑战的复杂性也在同步增长。我们正在扩张的数据工程师、数据科学家和分析师团队在使用 Airflow,它是我们搭建的一个可以快速推进工作,保持发展优势的平台,因为我们可以自己编辑、监控和改写 数据管道。

今天,我们非常自豪地宣布我们要 开源 和 共享 我们的工作流程管理平台:Airflow。

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

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

这些作业网络通常就是 有向无环图(DAGs),它们具有以下属性:已排程: 每个作业应该按计划好的时间间隔运行

关键任务: 如果一些作业没有运行,那我们就有麻烦了

演进: 随着公司和数据团队的成熟,数据处理也会变得成熟

异质性: 现代化的分析技术栈正在快速发生着改变,而且大多数公司都运行着好几个需要被粘合在一起的系统

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

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

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

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

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 查询、浏览结果集,同时也提供了创建和分享一些简单图表的方法。这个制图应用是由 Highcharts、Flask Admin 的增删改查接口以及 Airflow 的 hooks 和 宏库混搭而成的。URL 参数可以传递给你图表中使用的 SQL,Airflow 的宏是通过 Jinja templating 的方式工作的。有了这些特性和查询功能,Airflow 用户可以很容易的创建和分享结果集和图表。

一种催化剂

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

说得够多的了!

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

在 airbnb.io 上查看我们所有的开源项目并 在 Twitter 上关注我们:@AirbnbEng + @AirbnbData如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

python做流程管理平台_[译] Airflow: 一个工作流程管理平台相关推荐

  1. 一个用python做的完整项目_我从一个小项目学习Python编程的全过程(二)

    在(一)中的时候我们分析了如何获取所有人无忧币的统计情况,接下来开始学着写代码了: 首先第一步我们得把第一个页面的源代码:#coding:utf-8 import urllib url = 'http ...

  2. python写酒店管理系统报告_酒店管理系统学生工作-部门管理Python,作品,python

    # Author: cybersnow # 开发时间:2020-17-07 # 开发工具:PyCharm import re # 导入正则表达式模块 import os # 导入操作系统模块 data ...

  3. springmvc工作流程详解_软装设计师工作流程详解

    狼叔说: 随着精装修房交付和全案设计理念的推进 软件配饰设计越来越被大家关注 很多人希望学习软装设计 但是不知从何入手 狼叔课堂要特别提醒: 软装设计可不是摆摆家具,挂张画那么简单, 同样需要深厚的艺 ...

  4. python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  5. 用K2设计一个工作流程

    在这篇文章里,我将以一个公司的假期申请流程作为例子来说明如何设计一个工作流程.整个流程是这样的:          1.公司人员填写假期申请单,单上面有姓名.请假开始日期.请假结束日期.请假天数等信息 ...

  6. 用python做公众号网页_使用python一步一步搭建微信公众平台(一)

    最近无聊,想玩玩微信的公众平台,后来发现乐趣无穷啊~ 使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份 ...

  7. python做自动化测试的优点_乐搏讲自动化测试-python语言特点及优缺点(5)

    相信小伙伴们都知道,随着软件测试行业的发展和进步自动化测试已经成为必然.在竞争日益激烈的市场环境中也是你升职加薪的利器. 所以,小编决定从今天起!将要系统.连续.高质量的持续更新「整套自动化测试」文章 ...

  8. python做作业没头绪_使用Python做作业

    python做作业没头绪 Applying OpenCV and Tesseract to do your math-homework 应用OpenCV和Tesseract进行数学作业 The pos ...

  9. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

最新文章

  1. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
  2. windows下的linux开发环境Mingw与Cygwin
  3. java 按顺序取出json_java取json 的方法
  4. WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
  5. UML从需求到实现---类图(2)
  6. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
  7. Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)
  8. QT的QCheckBox类的使用
  9. window使用技巧记录
  10. 雷电交加,雨水倾泻--北京
  11. java list e 查找_源码(04) -- java.util.ListE
  12. linux免密码登录
  13. HAProxy安装和配置大全
  14. 千万不要手贱在win10系统上执行win7激活工具!!!
  15. NGINX简介及工作原理
  16. 机器学习实战(一)xgboost实战
  17. cattee翻译_钻机词汇中英翻译
  18. 三菱FX3U——红绿灯
  19. nginx方向代理域名访问
  20. JavaScript中的Map、Set及其遍历

热门文章

  1. Movavi Screen Recorder——录制外界声音的方法
  2. ROSTEA软件下载及情感分析详细操作教程(附网盘链接)
  3. Flink WaterMark 详解
  4. 软考高级考试中有五大证书,其中哪个更值得考?
  5. 使用docker部署mysql8.0+zabbix5.0
  6. 条码打印软件如何固定二维码的尺寸和位置
  7. 音乐考试分数计算机,省联考音乐分数怎么算 分数线是多少
  8. nodejs使用redis库
  9. 常用的HTML5网页制作软件
  10. 文件二维码(FileQRCode) – 通过动态二维码无网传输文件(手机互传,手机电脑互传)