数据工程必备技能:什么是Apache Airflow?

数据工程必备技能:什么是Apache Airflow?

工作自动化在所有行业中都起着关键作用,它是实现功能效率的最快方法之一。我们大多数人都必须处理不同的工作流程,例如:从多个数据库收集数据、对其进行预处理、上传和报告。 

所以,如果我们的日常任务能按照规定的时间自动触发,并且所有流程都按顺序执行,那就太好了。Apache Airflow 就是这样一种非常有帮助的工具。无论是数据科学家、数据工程师还是软件工程师,你都一定会发现这个工具很有用。在本文中,我们将为你介绍什么是 Apache Airflow。如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
四个数据科学求职者的常见失误
跟数据科学家相比,数据工程师更需要哪些技能?
工程师行业危机:35岁就该退休了吗?
初学数据科学常犯的三个SQL错误

什么是Airflow?

Apache Airflow于2014年10月由Airbnb开源

Airbnb 对 Airflow 的官方定义如下:

Airflow 是一个以编程方式编写、安排和监控工作流的平台。

Apache Airflow 是一个由 Airbnb 开源的工作流管理平台(workflow management platform),用于管理有向无环图 (DAG) 及其相关任务。默认情况下,Python 是用来确定管道任务的编程语言。

Airflow原理

Airflow中,创建和维护工作流的页面非常丰富,以下这些特点可以让它从竞争对手中脱颖而出:

  • 动态性:在 Python 编程语言的帮助下,管道可以实现动态实例化。
  • 可伸缩性:由于Airflow的模块化架构(Modular Architecture)和编排能力,员工的数量可以根据用户的要求进行伸缩(增加或减少)
  • 可扩展性:Airflow 能够定义自定义运算(Custom Operator),并与第三方工具(如 StatsD、MySQL 等)集成。
  • 简洁性:借助 Jinja(Python 的 Web 模板引擎),可以在Airflow中进行参数化(Parametrization)。同时还具备易于学习的用户界面。

Airflow的发展史图片

Airbnb的标志 图源:Wikimedia

Airbnb 开发了 Airflow 来管理他们庞大而复杂的计算工作(Computational Jobs)网络。他们于 2014 年 10 月开源这个项目,并于 2016 年 3 月成为 Apache 孵化器计划(Apache Incubator Program)的一部分,最终,于 2019 年 1 月成为 Apache 软件基金会(Apache Software Foundation)的顶级项目。现在,包括Airbnb、Robinhood和Twitter在内的400多家公司都在自己的数据架构中使用了Airflow。

从2014年10月到2021年7月
Airflow公司在GitHub中的贡献数量

Airflow架构(Airflow Architecture)

Airflow 是一个工作流调度器(Workflow Schedule)和管理程序,主要用于开发和维护数据管道。这些任务以有向无环图 (DAG) 的形式表示,该图进一步包含了一系列相互关联的任务。在深入研究架构之前,让我们先高度概括一下 Airflow 中的一些基本术语:

基本概念

Airflow有一些基本术语,用于整个系列的同时,构建和监控数据管道。这些术语如下:

任务(Tasks)图片

单个模块表示进程(Processes)或任务(Tasks)

任务是基本的执行单位,包括从数据库中读取数据、处理数据、将数据存储在数据库中等。在Airflow中,有三种基本类型的任务:

  • 运算符(Operator)用于构建大多数任务(Tasks)的预定义模板。
  • 传感器(Sensors)它们是运算的一个特殊子类,只负责一项任务——等待某外部事件发生,就会允许运行其下游任务。
  • 任务流(TaskFlow)最近, Airflow 2.0 中添加了这种任务,实现在数据管道中共享数据。

有向无环图(Directed Acyclic Graphs- DAGs)

通过依赖关系(Dependencies)相连的任务,由此形成 DAG

从本质上讲,DAG 是一个图,节点(Nodes)通过有向边连接,节点之间没有循环边(Cycle Edges)在 Airflow 中,任务(Tasks)就是节点,有向边表示任务之间的依赖项。

控制流(Control Flow)

DAG 具有连接节点的有向边。类似地,在 Airflow 中,DAG 具有连接任务之间的依赖关系。它定义了应如何使用 DAG 中执行工作流。图片

任务实例

单个任务的执行。DAGs还能表明任务的状态,例如“正在运行”、“运行成功”、“运行失败”、“跳过”、“等待重新运行”等。任务不同状态的颜色代码如下:图片

Airflow 界面中由表示任务状态的颜色代码

DAGrun

在 Airflow 中触发 DAG 时,会创建一个 DAGrun 对象。DAGrun 是 DAG 的执行实例,包含 DAG 实例化的时间戳和 DAG 的任务状态(正在运行、运行成功、运行失败)。DAGruns 的可以由外部触发器(External Trigger)创建,也可以由调度程序按计划的时间间隔(Scheduled Intervals)创建。

案例:

在以下 DAG 的执行中,DAGrun承担四个不同的任务:

  • 读取数据(Reading Data):从源读取数据。
  • 处理分类数据(Categorical Data):处理分类数据。
  • 处理连续数据(Continuous Data):处理连续数据。
  • 合并数据(Merging Data):合并已处理的分类数据和连续数据。

此外,依赖关系的设置如下:

  • 读取数据是处理分类数据和处理连续数据的上游任务,合并数据是处理分类数据和处理连续数据的下游任务。

下图描述了 DAG 的执行过程:

示例:DAG的执行过程

执行步骤如下:

  • 当 DAG 被触发时,会创建一个 DAGrun 实例,它会将 DAG 的状态设置为“正在运行”,同时还会包含任务的状态。任务状态被设置为“等待中”,并根据它们的依赖关系进行调度。
  • 假设,第一个任务(即读取数据)成功执行了。该任务被设置为“正在运行”状态,而其他任务仍然是“正在等待”状态。成功执行后,其状态设置为“执行成功”或“执行失败”。具体参考上图中的图a。
  • 根据依赖关系,处理任务(即处理分类数据和处理连续数据)会被安排在读取数据任务之后执行。
  • 因此,这些任务的状态被设置为“正在运行”并且开始执行(顺次执行还是并行执行取决于执行器)。具体参考上图中的图b 。
  • 成功执行后,其状态更改为“执行成功”,下一个任务(即合并数据)的状态设置为“正在运行”。具体参考上图中的图 c。
  • 由于设置了依赖项,最终任务即合并数据的只有在处理任务成功后才会执行。
  • 最终任务成功执行后,其状态设置为“执行成功”。如需进一步参考,可以查看上图中的图d。
  • 由于 DAG 已成功执行,因此其状态设置为“执行成功”。

Airflow 的组件(Airflow’s Components)

我们已经通过实例了解Airflow中的基本术语,下面,我们可以看看构成 Airflow 架构的主要组件:

具备主要组件的通用Airflow架构

网络服务器(Webserver)网络服务器是一个简单的用户界面,可在日志的帮助下检查、触发和调试 DAG 的工作,通过显示任务状态(Task States),帮助用户与元数据数据库交互。

执行器(Executor)执行器是处理正在运行的任务的机制。Airflow 有很多执行器,主要有 顺序执行器(Sequential Executor)、本地执行器(Local Executor) 和 调试执行器(Debug Executor),以及用于复杂任务的远程执行器(Remote Executor),例如 Celery执行器、Dask 执行器、Kubernetes执行器和 CeleryKubernetes 执行器。

员工:执行者通过与员工密切合作,执行任务,将队列中等待的任务分配给员工。

调度器(Scheduler):调度器有两个任务:

  • 触发计划的 DAG。
  • 将任务提交给执行器运行。

调度器是一个多线程的 Python 进程,用 DAG 信息来调度任务,将每个 DAG 的信息(DAG Information)存储在元数据数据库中。

元数据数据库(Metadata Database)元数据数据库支持其他组件之间的交互,并存储其他三个组件(网络服务器、调度器和执行器)存储的所有状态。所有进程在这个数据库中进行读写。SQLAlchemy 支持的数据库管理系统(如 MySQL 和 PostgresDB)可用于元数据数据库。

组件的运作流程

Airflow 架构中组件的运作流程
  • 调度程序不断地访问 DAG 目录,并为数据库中的每个 DAG 创建一个条目。
  • 然后解析 DAG 并创建 DAGRun。调度器还创建需要执行的任务实例。
  • 所有这些任务都在数据库中标记为“已安排”。
  • 然后,主调度器处理所有标记为“已安排”的任务,并将它们送至等待队伍中。然后将这些任务标记为“等待中”。
  • 执器从调度器队列中获取任务,并将它们分配给员工。

总结

在本文中,我们一起了解了 Apache Airflow 的特性及其用户界面组件,希望这篇文章让你对Apache Airflow的概念有所了解。感谢你的阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:INSAID
翻译作者:Lia
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://insaid.medium.com/introduction-to-apache-airflow-df001db934b