1. 简介
Apache Airflow 是一个开源平台,用于编排、调度和监控工作流。
它通过定义有向无环图(DAGs)来组织任务和其依赖关系,支持任务的定时调度、自动执行和失败重试。
Airflow 提供了强大的可视化界面,用于查看任务状态和日志,非常适合处理数据管道、自动化工作流和批处理任务。
2. 安装 Apache Airflow
pip install apache-airflow
3. 设置 Airflow 环境
安装完成后,我们需要初始化 Airflow 的数据库,并启动 Web 服务器和调度器。运行以下命令(windows 可以在 WSL中执行):
# 初始化数据库
airflow db init
# 启动 Web 服务器
airflow webserver -p 8080
# 启动 Airflow 调度器
airflow scheduler
# 创建用户
airflow users create --username root --password 123 --firstname michael
--lastname ming --role Admin --email root@example.com
Web 服务器启动后,你可以通过浏览器访问 Airflow 的 UI,默认地址是 http://localhost:8080
可以看到如下界面
4.创建一个简单的 DAG 示例
在 Airflow 中,DAG(有向无环图)定义了任务及其依赖关系。我们将创建一个简单的 DAG,包含两个任务:打印当前时间和输出一条消息。
4.1 创建 DAG 文件
在 Airflow 中,DAG 文件通常位于 ~/airflow/dags 目录下。
我们可以创建一个新的 Python 文件,例如 simple_dag.py,然后添加以下代码:
from datetime import datetime
from airflow import DAG
from airflow.operators.python import PythonOperator
# 定义任务 1: 打印当前时间
def print_time():
print(f"当前时间是: {datetime.now()}")
# 定义任务 2: 输出一条简单消息
def print_message():
print("这是一个 Airflow 示例任务!")
# 创建 DAG
dag = DAG(
'simple_example_dag',
description='一个简单的 Airflow 示例 DAG',
schedule_interval=None, # 设置为 None,表示不会自动运行,只能手动触发
start_date=datetime(2024, 11, 10),
catchup=False, # 防止 Airflow 在启动时自动回溯执行
)
# 创建任务 1
task1 = PythonOperator(
task_id='print_time',
python_callable=print_time,
dag=dag,
)
# 创建任务 2
task2 = PythonOperator(
task_id='print_message',
python_callable=print_message,
dag=dag,
)
# 设置任务依赖关系:task1 -> task2
task1 >> task2
- DAG 定义了一个有向无环图,包含多个任务。
PythonOperator
用于执行 Python 函数,在这里,我们分别创建了两个简单的任务:print_time 和 print_message。- task1 >> task2 定义了任务的依赖关系,即 task1 在执行成功后才会执行 task2。
4.2 手动触发
点击 手动触发 任务,可以看到两个函数先后执行了
5. 其他操作符
Airflow 提供了丰富的操作符来满足不同的任务需求,常见的包括:
- PythonOperator:执行 Python 函数。
- BashOperator:执行 Bash 命令。
- DummyOperator:占位符任务,用于控制依赖关系。
- EmailOperator:发送电子邮件(可用于失败时的报警)。
- HttpSensor:检查 HTTP 端点的状态。
- PostgresOperator:执行 SQL 查询。
- BranchPythonOperator:根据条件决定执行哪个任务。
- SubDagOperator:支持嵌套 DAG。
通过灵活使用这些操作符,你可以构建复杂的工作流,并有效地管理任务之间的依赖关系。