查看原文
其他

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

Lia 大数据应用 2022-10-18

今日份知识你摄入了么?

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

所以,如果我们的日常任务能按照规定的时间自动触发,并且所有流程都按顺序执行,那就太好了。Apache Airflow 就是这样一种非常有帮助的工具。无论是数据科学家、数据工程师还是软件工程师,你都一定会发现这个工具很有用。在本文中,我们将为你介绍什么是 Apache Airflow。


什么是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的概念有所了解。感谢你的阅读!

原文作者:INSAID

翻译作者:Lia

美工编辑:过儿

校对审稿:Jiawei Tong

原文链接:https://insaid.medium.com/introduction-to-apache-airflow-df001db934b

本周公开课预告



往期精彩回顾


在微软成功的数据科学家身上,我学到这5个习惯

如何用Python处理金融数据?

5个提升你分析Slide Decks的技巧

金融中的数据分析师,都做什么工作?

四种数据分析方法,帮你成功做决策!





点「在看」的人都变好看了哦

点击“阅读原文”查看数据应用学院核心课程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存