Apache Airflow 是一个开源的工作流管理平台,用于编写、调度和监控数据管道。通过 Airflow,你可以以编程方式定义工作流,将任务定义为 Directed Acyclic Graphs (DAGs),并自动化调度和监控任务的执行。以下是如何使用 Airflow 进行工作流管理与调度的基本步骤:
1. 安装 Airflow
首先,需要安装 Airflow。可以通过 pip 安装,也可以使用 Docker 容器来运行 Airflow。
-
使用 pip 安装 Airflow:
pip install apache-airflow
安装过程中,可以选择安装额外的依赖项,如 PostgreSQL、MySQL、AWS 等。
-
使用 Docker 安装 Airflow:
如果你更喜欢使用 Docker,可以从 Apache Airflow 官方 DockerHub 拉取 Airflow 的 Docker 镜像并进行安装。
2. 初始化数据库
Airflow 需要一个元数据库来存储 DAG 和任务的状态信息。默认情况下,它使用 SQLite,但在生产环境中建议使用 PostgreSQL 或 MySQL。
- 初始化数据库:
airflow db init
3. 创建 Airflow 用户
在启动 Airflow Web 界面之前,需要创建一个用户来访问 Web 界面。
- 创建用户:
airflow users create \ --username admin \ --password admin \ --firstname Admin \ --lastname User \ --role Admin \ --email admin@example.com
4. 启动 Airflow 组件
Airflow 包含几个关键组件,包括调度器 (Scheduler)、Web 界面 (Web Server) 和工作执行器 (Worker)。
-
启动 Web 服务器:
airflow webserver --port 8080
这将在本地启动一个 Web 界面,默认端口为 8080。你可以通过浏览器访问
http://localhost:8080
。 -
启动调度器:
调度器是负责监控 DAGs 并根据设定的计划触发任务的进程。airflow scheduler
5. 创建 DAG (Directed Acyclic Graph)
DAG 是 Airflow 中工作的核心,定义了一组任务及其执行顺序。DAG 是一个 Python 文件,包含任务和它们的依赖关系。
-
定义一个简单的 DAG:
from datetime import datetime from airflow import DAG from airflow.operators.dummy_operator import DummyOperator default_args = { 'owner': 'airflow', 'start_date': datetime(2023, 1, 1), 'retries': 1, } with DAG('simple_dag', default_args=default_args, schedule_interval='@daily', # 每天运行一次 catchup=False) as dag: start = DummyOperator(task_id='start') end = DummyOperator(task_id='end') start >> end # 设置任务的依赖关系
-
保存 DAG 文件:
将上述代码保存为simple_dag.py
,并将其放在 Airflow 的 DAGs 目录中(通常位于~/airflow/dags/
)。
6. 调度和监控 DAG
-
访问 Web 界面:
在 Web 界面中,你可以看到所有定义的 DAGs。可以手动触发 DAG 或查看其执行历史、日志等。 -
启动 DAG:
你可以手动触发 DAG,也可以等待调度器自动触发它。 -
监控任务:
在 Web 界面中,你可以查看每个任务的执行状态(成功、失败、正在进行等),并查看日志以了解任务执行的详细信息。
7. 配置和管理 DAG
Airflow 提供了许多配置选项来控制 DAG 的行为,包括重试策略、任务优先级、并行度限制等。
-
任务重试:
在default_args
中可以设置任务的重试次数和间隔时间:default_args = { 'owner': 'airflow', 'start_date': datetime(2023, 1, 1), 'retries': 3, 'retry_delay': timedelta(minutes=5), }
-
并行度和依赖管理:
可以通过设置dag_concurrency
、max_active_runs_per_dag
等参数来控制 DAG 和任务的并行度。
8. 使用连接和变量
Airflow 支持通过 UI 或 CLI 配置连接信息(如数据库、API 密钥)和全局变量,用于在 DAG 中使用。
-
设置连接:
在 Web 界面的 Admin > Connections 中可以配置新的连接,如数据库连接、AWS 凭证等。 -
使用变量:
可以通过airflow variables
命令或 Web 界面管理全局变量,在 DAG 中使用:from airflow.models import Variable my_var = Variable.get("my_variable")
9. 扩展 Airflow
Airflow 支持自定义操作符(Operator)、传感器(Sensor)等,你可以根据需要编写自定义逻辑并集成到 DAG 中。
- 编写自定义操作符:
如果内置操作符不满足需求,可以编写自定义操作符:from airflow.models import BaseOperator from airflow.utils.decorators import apply_defaults class MyCustomOperator(BaseOperator): @apply_defaults def __init__(self, my_param, *args, **kwargs): super(MyCustomOperator, self).__init__(*args, **kwargs) self.my_param = my_param def execute(self, context): print(f"My param is: {self.my_param}")
总结
Apache Airflow 是一个强大的工具,适用于编排和管理复杂的工作流。通过 DAG 定义任务,Airflow 能够自动化调度和监控任务执行,帮助确保数据管道的可靠性和可维护性。掌握 Airflow 的基本用法后,你可以进一步探索其高级功能,如动态 DAG 生成、任务依赖传递、XComs 数据传递等,以应对更复杂的数据处理场景。