Apache Airflow已经成为Python生态系统中管道编排的事实上的库。与类似的解决方案相反,由于它的简单性和可扩展性,它已经获得了普及。在本文中,我将尝试概述它的主要概念,并让您清楚地了解何时以及如何使用它。
Airflow应用场景
想象一下,你想要构建一个机器学习管道,它由以下几个步骤组成:
- 从基于云的存储中读取图像数据集
- 处理图像
- 使用下载的图像训练深度学习模型
- 将训练好的模型上传到云端
- 部署模型
你将如何安排和自动化这个工作流程?Cron作业是一个简单的解决方案,但它也带来了许多问题。最重要的是,它们不允许你有效地扩展。Airflow提供了轻松调度和扩展复杂数据流程编排的能力,另一方面,它还能够在故障后自动重新运行它们,管理它们的依赖关系,并使用日志和仪表板监视它们。
在构建上述数据流之前,让我们先了解Apache Airflow 的基本概念。
Airflow 简介
Apache Airflow 是一个开源的平台,用于编排、调度和监控工作流,工作流是由一系列任务(Tasks)组成的,这些任务可以是数据处理、数据分析、机器学习模型训练、文件传输等各种操作。因此,它是ETL和MLOps用例的理想解决方案。示例用例包括:
- 从多个数据源提取数据,对其进行聚合、转换,并将其存储在数据仓库中。
- 从数据中提取见解并将其显示在分析仪表板中
- 训练、验证和部署机器学习模型
核心组件
在默认版本中安装Apache Airflow 时,你将看到四个不同的组件。
- Webserver: Webserver是Airflow的用户界面(UI),它允许您在不需要CLI或API的情况下与之交互。从那里可以执行和监视管道,创建与外部系统的连接,检查它们的数据集等等。
- 执行器:执行器是管道运行的机制。有许多不同类型的管道在本地运行,在单个机器中运行,或者以分布式方式运行。一些例子是LocalExecutor, SequentialExecutor, CeleryExecutor和KubernetesExecutor
- 调度器:调度器负责在正确的时间执行不同的任务,重新运行管道,回填数据,确保任务完成等。
- PostgreSQL:存储所有管道元数据的数据库。这通常是Postgres,但也支持其他SQL数据库。
安装Airflow最简单的方法是使用docker compose。你可以从这里下载官方的docker撰写文件:
$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
基本概念
要学习Apache Airflow,必须熟悉它的主要概念,这些概念可能有点难理解,让我们试着揭开它们的神秘面纱。
DAGs
所有管道都定义为有向无环图(dag)。每次执行DAG时,都会创建一个单独的运行。每个DAG运行都是独立的,并且包含一个关于DAG执行阶段的状态。这意味着相同的dag可以并行执行多次。
要实例化DAG,可以使用DAG函数或与上下文管理器一起使用,如下所示:
from airflow import DAG
with DAG(
"mlops",
default_args={
"retries": 1,
},
schedule=timedelta(days=1),
start_date=datetime(2023,