如果您从事大数据工作,您很可能听说过 Apache Airflow。它于 2014 年作为 Airbnb 的一个开源项目开始,旨在帮助该公司处理其批量数据管道。从那时起,它已成为数据工程中最受欢迎的开源工作流管理平台之一,并收到来自 Lyft、沃尔玛和彭博社等组织的公共贡献。

Apache Airflow 是用 Python 编写的,具有灵活性和健壮性。其功能强大且装备精良的用户界面简化了工作流管理任务,例如跟踪作业和配置平台。由于它依赖代码来定义其工作流程,因此用户可以编写他们想要在流程的每一步执行的代码。 Apache Airflow 不会对您安排工作流程的方式实施限制,从而提供非常可定制和理想的体验。

成千上万的公司使用 Apache Airflow,而且这个数字还在继续增长。今天,我们将探讨这个流行工具的基础知识以及基础知识。我们还将讨论您可以采取的第一步。

我们将介绍:

  • 什么是 Apache Airflow?

  • 为什么要使用 Apache Airflow?

  • Apache Airflow 基础知识

  • Apache Airflow 是如何工作的?

  • 使用 Apache Airflow 的第一步

什么是 Apache Airflow?

Apache Airflow 是一个强大的调度程序,用于以编程方式创作、调度和监控工作流。它旨在处理和编排复杂的数据管道。它最初是为了解决与长期 cron 任务和大量脚本相对应的问题而开发的,但它已发展成为市场上最强大的数据管道平台之一。

我们可以将 Airflow 描述为一个用于定义、执行和监控工作流的平台。我们可以将_workflow_定义为您为实现特定目标而采取的任何步骤序列。在不断壮大的Big Data团队中出现的一个常见问题是在端到端工作流中将相关工作拼接在一起的能力有限。在 Airflow 之前,有 Oozie,但它有很多限制,但 Airflow 在复杂的工作流程方面已经超越了它。

Airflow 也是一个代码优先平台,其设计理念是数据管道最好用代码表示。它被构建为可扩展的,具有允许与许多常见外部系统交互的可用插件,以及可以根据需要创建自己的平台的平台。它能够每天运行数千个不同的任务,从而简化工作流程管理。

气流用于许多行业:

  • 大数据

  • 机器学习

  • 电脑软件

  • 金融服务

  • IT服务

  • 银行业务

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--cclzv6P2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/89hnin4z7etmnhgqdwcl.png)

Apache Airflow 有何不同?

下面列出了 Airflow 与其他工作流管理平台之间的一些差异。

  • Directed Acyclic Graphs (DAGs) 是用 Python 编写的,它具有平滑的学习曲线,并且比 Oozie 使用的 Java 更广泛地使用。

  • 有一个为 Airflow 做出贡献的大型社区,这使得为主要服务和云提供商找到集成解决方案变得很容易。

  • Airflow 功能多样、富有表现力,专为创建复杂的工作流程而设计。它提供了有关工作流程的高级指标。

  • 与其他工作流管理平台相比,Airflow 具有丰富的 API 和直观的用户界面。

  • 它对 Jinja 模板的使用允许使用案例,例如引用与 DAG 运行日期相对应的文件名。

  • 有托管的 Airflow 云服务,例如 Google Composer 和 Astronomer.io。

为什么要使用 Apache Airflow?

在本节中,我们将看看 Airflow 的一些优点和缺点,以及一些值得注意的用例。

优点:

  • **开源:**您可以下载Airflow并立即开始使用它,您可以与社区中的同行一起工作。

  • 与云集成: Airflow 在云环境中运行良好,为您提供了很多选择。

  • 可扩展: Airflow 具有高度可上下扩展。它可以部署在单个服务器上,也可以扩展到具有多个节点的大型部署。

  • 灵活且可定制: Airflow 旨在与大多数软件开发环境的标准架构配合使用,但其灵活性允许大量定制机会。

  • **监控能力:**气流允许多种监控方式。例如,您可以从用户界面查看任务的状态。

  • **代码优先平台:**这种对代码的依赖使您可以自由地编写要在管道的每一步执行的代码。

  • 社区: Airflow 庞大而活跃的社区有助于扩展信息并提供与同行交流的机会。

缺点:

  • 依赖 Python: 虽然许多人认为 Airflow 如此严重地依赖 Python 代码是一件好事,但那些没有太多使用 Python 经验的人可能会有更陡峭的学习曲线。

  • 故障: 虽然 Airflow 通常是可靠的,但也可能像任何产品一样出现故障。

用例

Airflow 可用于几乎所有批处理数据管道,并且有许多不同的文档化用例,最常见的是与大数据相关的项目。以下是 Airflow 的 Github 存储库中列出的一些用例示例:

  • 使用 Airflow 和 Google BigQuery 为 Data Studio 仪表板提供动力

  • 使用 Airflow 帮助构建和管理 AWS 上的数据湖

  • 使用 Airflow 解决生产升级问题,同时最大限度地减少停机时间

Apache Airflow 的基础知识

现在我们已经讨论了 Airflow 的基础知识以及优势和用例,让我们深入了解这个强大平台的基础知识。

有向无环图 (DAG)

工作流是使用有向无环图 (DAG) 定义的,它由要执行的任务及其连接的依赖项组成。每个 DAG 代表您要运行的一组任务,它们在 Apache Airflow 的用户界面中显示任务之间的关系。

让我们分解首字母缩略词:

  • **定向:**如果您有多个具有依赖关系的任务,则每个任务至少需要一个指定的上游或下游任务。

  • **非循环:**任务不允许产生自引用的数据。这避免了产生无限循环的可能性。

  • 图表: 任务具有明确定义的流程和与其他任务的关系的逻辑结构。例如,我们可以用一个有向无环图来表达三个任务之间的关系:X、Y、Z。我们可以说,“只有在 X 执行完后才执行 Y,但 Z 可以随时独立执行”。我们可以定义额外的约束,例如为失败的任务执行的重试次数以及何时开始任务。

注意: DAG 定义了如何执行任务,但没有定义特定任务的作用。

可以通过实例化airflow.models.dag.DAG的对象来指定 DAG,如下例所示。 DAG 将在 Web 服务器的 UI 中显示为“Example1”,并将运行一次。

dag = DAG('Example1',
          schedule_interval='@once',
          start_date=days_ago(1),)

进入全屏模式 退出全屏模式

天跑

当 DAG 被执行时,它被称为 *DAG 运行*。假设您有一个 DAG 计划每小时运行一次。该 DAG 的每个实例化都会建立一个 DAG 运行。可以有多个 DAG 运行连接到同时运行的 DAG。

任务

任务是运算符的实例化,它们的复杂性各不相同。您可以将它们想象成由 DAG 中的节点表示的工作单元。他们描绘在工作流程的每个步骤中完成的工作,而他们描绘的实际工作由操作员定义。

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--VITyCyAp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/mcbkh6t15q1aw3z44osf.png)

运营商

虽然 DAG 定义了工作流程,但操作员定义了工作。运算符就像用于执行特定任务的模板或类。

所有算子都源自BaseOperator。有许多通用任务的算子,例如:

  • PythonOperator

  • MySqlOperator

  • EmailOperator

  • BashOperator

这些运算符用于指定要在 Python、MySQL、电子邮件或 bash 中执行的操作。

三种主要类型的运算符:

  1. 执行操作或请求不同系统执行操作的操作员

  2. 将数据从一个系统移动到另一个系统的操作员

  3. 运行直到满足特定条件的算子

挂钩

Hooks 允许 Airflow 与第三方系统交互。使用钩子,您可以连接到外部数据库和 API,例如 MySQL、Hive、GCS 等。它们就像运营商的积木。挂钩中不包含任何安全信息。它存储在 Airflow 的加密元数据数据库中。

注意: Apache Airflow 具有社区维护的软件包,其中包括用于 Google 和 Amazon 等服务的核心operatorshooks。这些可以直接安装在您的 Airflow 环境中。

关系

气流在定义任务之间的复杂关系方面超过了。假设我们要指定任务t1在任务t2之前执行。我们可以使用四种不同的语句来定义这种确切的关系:

t2.set_upstream(t1)

进入全屏模式 退出全屏模式

t1.set_downstream(t2)

进入全屏模式 退出全屏模式

t1 >> t2

进入全屏模式 退出全屏模式

t2 << t1

进入全屏模式 退出全屏模式

Apache Airflow 是如何工作的?

[Alt](https://res.cloudinary.com/practicaldev/image/fetch/s--YQ5IfNKm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/abwpi1qpcp9cl73s79b7.png)

四个主要组件 构成了这个强大且可扩展的工作流调度平台:

  1. 调度器:

调度程序监视所有 DAG 及其关联的任务。当满足任务的依赖关系时,调度程序将启动任务。它定期检查活动任务以启动。

  1. 网络服务器:

Web 服务器是 Airflow 的用户界面。它显示作业的状态,并允许用户与数据库交互并从远程文件存储读取日志文件,如S3、Google Cloud Storage、Microsoft Azure blob 等。

  1. 数据库:

DAG 的状态及其相关任务保存在数据库中,以确保计划记住元数据信息。 Airflow 使用 SQLAlchemy 和对象关系映射 (ORM) 连接到元数据数据库。

调度程序检查所有 DAG 并存储相关信息,例如调度间隔、每次运行的统计信息和任务实例。

  1. 执行人:

执行者决定如何完成工作。有不同类型的执行器可用于不同的用例。

执行者示例:

*SequentialExecutor:此执行程序可以在任何给定时间运行单个任务。它不能并行运行任务。它有助于测试或调试情况。

*LocalExecutor:此执行程序启用并行性和超线程。它非常适合在本地机器或单个节点上运行 Airflow。

*CeleryExecutor:此执行程序是运行分布式 Airflow 集群的首选方式。

*KubernetesExecutor:此执行程序调用 Kubernetes API 为每个要运行的任务实例制作临时 pod。

那么,气流是如何工作的?

Airflow 在某个时间段内检查后台的所有 DAG。此时间段使用processor_poll_interval配置设置,等于一秒。一旦检查了 DAG 文件,就会根据调度参数进行 DAG 运行。为需要执行的任务实例化任务实例,其状态在元数据数据库中设置为SCHEDULED

调度查询数据库,检索状态为SCHEDULED的任务,并将它们分发给执行者。然后,任务的状态变为QUEUED。那些排队的任务由执行它们的工作人员从队列中提取。发生这种情况时,任务状态将更改为RUNNING

当一个任务完成后,worker会将其标记为_failed_或_finished_,然后调度器更新元数据库中的最终状态。

使用 Apache Airflow 的第一步

既然您已经了解了 Apache Airflow 的基础知识,那么您就可以开始了!学习这个工具的一个好方法是用它来构建一些东西。下载 Airflow 后,您可以在线设计自己的项目或为开源项目做出贡献

一些有趣的开源项目:

  • 一个插件,可让您在浏览器中编辑 DAG

  • Docker 阿帕奇气流

  • 从 YAML 配置文件动态生成 DAG

  • 及更多

关于 Airflow 的知识还有很多。接下来要介绍的一些推荐主题是:

  • 个子 DAG

  • 个 SLA

  • 气流传感器

要开始学习这些主题,请查看 Educative 的课程An Introduction to Apache Airflow。这个精心策划的实践课程涵盖了 Apache Airflow 的构建块,以及更高级的方面,例如 XCom、操作员和传感器,以及使用 UI。您将掌握这个令人梦寐以求的工作流管理平台,并最终获得一份有价值的证书。

您在本课程中获得的技能将在您的旅程中助您一臂之力!

学习愉快!

继续阅读大数据

  • 什么是大数据?特性、类型和技术

  • 与微软应用人工智能工程师一起探索数据科学

  • Kubernetes 教程:容器编排入门

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐