apache-airflow

2024-10-02

python

每个人都在愤世疾俗,每个人又都在同流合污。——《自由在高处》

Apache Airflow® 是一个开源平台,用于开发、安排和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状态。Airflow 可以通过多种方式进行部署,从笔记本电脑上的单个进程到分布式设置,以支持最大的工作流程。

官方文档:

https://airflow.apache.org/

github:

https://github.com/apache/airflow/

Airflow 工作流的主要特点是所有工作流都在 Python 代码中定义。“工作流即代码”有以下几个用途:

  • 动态:Airflow 管道配置为 Python 代码,允许生成动态管道。

  • 可扩展:Airflow® 框架包含用于连接众多技术的运算符。所有 Airflow 组件都是可扩展的,以便轻松适应您的环境。

  • 灵活:工作流参数化是利用 Jinja 模板引擎构建的。

请看以下代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from datetime import datetime

from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator

# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
# Tasks are represented as operators
hello = BashOperator(task_id="hello", bash_command="echo hello")

@task()
def airflow():
print("airflow")

# Set dependencies between tasks
hello >> airflow()

在这里,您可以看到:

  • 名为 “demo” 的 DAG,从 2022 年 1 月 1 日开始,每天运行一次。DAG 是 Airflow 对工作流的表示形式。

  • 两个任务,一个运行 Bash 脚本的 BashOperator,一个使用 @task 装饰器定义的 Python 函数

  • >> 定义依赖关系并控制任务的执行顺序

Airflow 会评估此脚本,并按设定的时间间隔和定义的顺序执行任务。“demo” DAG 的状态在 Web 界面中可见:

Demo DAG in the Graph View, showing the status of one DAG run

此示例演示了一个简单的 Bash 和 Python 脚本,但这些任务可以运行任意代码。想想运行 Spark 作业、在两个存储桶之间移动数据或发送电子邮件。还可以看到相同的结构随着时间的推移而运行:

Demo DAG in the Grid View, showing the status of all DAG runs

每列代表一个 DAG 运行。这是 Airflow 中最常用的两个视图,但还有其他几个视图可让您深入了解工作流程的状态。

Airflow® 是一个批处理工作流编排平台。Airflow 框架包含用于连接许多技术的运算符,并且可以轻松扩展以连接新技术。如果您的工作流具有明确的开始和结束时间,并且定期运行,则可以将其编程为 Airflow DAG。

如果您更喜欢编码而不是点击,Airflow 是适合您的工具。工作流定义为 Python 代码,这意味着:

  • 工作流可以存储在版本控制中,以便您可以回滚到以前的版本

  • 工作流可以由多人同时开发

  • 可以编写测试来验证功能

  • 组件是可扩展的,您可以在各种现有组件的基础上进行构建

丰富的计划和执行语义使您能够轻松定义定期运行的复杂管道。回填允许您在更改逻辑后对历史数据(重新)运行管道。在解决错误后重新运行部分管道的能力有助于最大限度地提高效率。

Airflow 的用户界面提供:

  1. 深入了解两件事:
  1. 管道

  2. 任务

  1. 一段时间内管道概述

在界面中,您可以检查日志和管理任务,例如在失败时重试任务。

Airflow 的开源性质可确保您使用由全球许多其他公司开发、测试和使用的组件。在活跃的社区中,您可以找到大量有用的资源,包括博客文章、文章、会议、书籍等。您可以通过 Slack 和邮件列表等多个渠道与其他对等节点联系。

Airflow 作为平台是高度可定制的。通过使用 Airflow 的公共接口,您可以扩展和自定义 Airflow 的几乎每个方面。

Airflow® 专为有限批处理工作流而构建。虽然 CLI 和 REST API 确实允许触发工作流,但 Airflow 并不是为无限运行基于事件的工作流而构建的。Airflow 不是流式处理解决方案。但是,经常可以看到 Apache Kafka 等流式处理系统与 Apache Airflow 配合使用。Kafka 可用于实时摄取和处理,事件数据写入存储位置,并且 Airflow 会定期启动处理一批数据的工作流。

如果您更喜欢单击而不是编码,Airflow 可能不是正确的解决方案。Web 界面旨在使管理工作流程尽可能简单,并且 Airflow 框架不断改进,以使开发人员体验尽可能流畅。但是,Airflow 的理念是将工作流定义为代码,因此始终需要编码。