开源编排工具Apache Airflow 使用简介

599 阅读3分钟

Apache Airflow 是一个开源的工作流管理平台,用于编排、调度和监控复杂的任务序列。它通过有向无环图(DAG)来定义工作流,这使得它非常适合于数据处理、数据分析和机器学习模型训练等任务。

基本概念

  • DAG(有向无环图) :Airflow 使用 DAG 来表示工作流程,每个节点代表一个任务,边表示任务之间的依赖关系。
  • Task(任务) :每个任务是工作流中的最小单位,可以是 Python 脚本、Shell 命令或数据库查询等。
  • Scheduler(调度器) :负责按照 DAG 的定义调度任务执行。
  • Executor(执行器) :在指定节点上执行任务,支持多种类型,如 Celery 执行器。

Apache Airflow 的用途

数据处理和分析

Airflow 可以从多个源提取数据,进行聚合、转换,并存储在数据仓库中。例如:

  • 从 MySQL 和 PostgreSQL 中提取数据并合并到 Hive 中。
  • 使用 Spark 进行大规模数据处理。

机器学习模型训练

Airflow 可以自动化机器学习模型的训练、验证和部署过程。例如:

  1. 从数据库中加载训练集。
  2. 使用 TensorFlow 或 PyTorch 训练模型。
  3. 在测试集上验证模型性能。

自动化工作流

通过 DAG 自动化复杂的业务逻辑,并提供可视化监控。例如:

  1. 定时发送报告邮件给管理层。
  2. 监控系统日志并触发告警通知。

如何开始使用 Apache Airflow

以下是一个简单教程:

步骤 1: 安装 Python 和必要环境

确保系统上安装了 Python,最好使用 Anaconda 或 MiniConda 管理环境。

步骤 2: 安装 Apache Airflow

打开终端运行以下命令安装 Airflow:

bash
pip install apache-airflow[celery]

步骤 3: 初始化数据库

Airflow 需要一个数据库来存储元数据。运行以下命令初始化数据库:

bash
airflow db init --backend=postgresql # 如果使用 PostgreSQL 作为后端,请指定相应配置文件中的连接信息 

步骤 4: 创建用户并启动服务

创建管理员用户:

bash
airflow users create \
    --username admin \
    --firstname YourName \
    --lastname YourLastName \
    --role Admin \
    --email your_email@example.com 

启动 Web 服务器和调度器:

bash
# 启动 Web 服务器,默认端口是8080,但可以自定义,如下所示:
airflower webserver -p 8080 -D 

# 启动调度器(在另一个终端窗口中)
airflower scheduler -D 

注意:如果遇到 airflower 命令不识别的问题,请检查是否正确安装了 apache-airlfow 包,并且是否正确设置了环境变量。如果仍然存在问题,可以尝试直接使用 python -m airflow 代替 airflower 前缀进行操作,如下所示:

bash
python -m airflow webserver ...
python -m airflow scheduler ...

这通常可以解决命令不识别的问题,因为直接调用模块会绕过可能存在的路径配置问题。

步骤 5: 编写第一个 DAG 文件

创建名为 hello_dag.py 的文件,在其中编写你的第一个 DAG。以下是一个简单例子:

python
from datetime import datetime, timedelta  
from airflow import DAG  
from airflow.operators.bash_operator import BashOperator  

default_args = {  
    'owner': 'admin',  
}  

with DAG(  
        dag_id='hello_dag',  
        default_args=default_args,  
        schedule_interval=timedelta(days=1), # 每天运行一次   
        start_date=datetime(2023,12,22), # 开始日期   
) as dag:
    
    t1 = BashOperator(
        task_id='print_date',
        bash_command='date'
    )
    
# 执行顺序默认按照代码顺序,因此不需要指定依赖关系。

将这个文件保存在 ~/airlfow/dags/ 目录下。如果该目录不存在,可以手动创建。在访问 http://localhost:8080 时,你就能看到新建的 DAG 并触发其执行了!

这就是如何开始使用 Apache Airfow 的基本步骤。你可以根据需要扩展这个例子并添加更多功能到你的工作流中,以满足不同的需求!