跳转到内容

Airflow单机部署

来自代码酷

Airflow单机部署[编辑 | 编辑源代码]

Airflow单机部署是指在单个服务器或计算机上安装和配置Apache Airflow工作流管理系统的过程。这种部署方式适合开发、测试环境或小规模生产环境,能够帮助用户快速搭建Airflow环境进行学习和实验。

介绍[编辑 | 编辑源代码]

Apache Airflow是一个开源的工作流自动化和调度系统,用于以编程方式编写、调度和监控工作流。单机部署是最简单的Airflow部署方式,适合初学者了解Airflow的核心概念和基本功能。在单机部署中,所有Airflow组件(如Web服务器、调度器、执行器和元数据库)都运行在同一台机器上。

单机部署的主要特点包括:

  • 简单易行,适合开发和测试
  • 不需要分布式环境
  • 使用SQLite或本地数据库(如PostgreSQL、MySQL)作为元数据存储
  • 执行器通常使用SequentialExecutor或LocalExecutor

前置条件[编辑 | 编辑源代码]

在开始Airflow单机部署之前,需要确保系统满足以下要求:

  • Python 3.6+
  • pip(Python包管理器)
  • 可选的数据库(如PostgreSQL、MySQL,如果不想使用默认的SQLite)
  • 足够的系统资源(建议至少2GB内存)

安装步骤[编辑 | 编辑源代码]

1. 创建Python虚拟环境[编辑 | 编辑源代码]

建议使用虚拟环境来隔离Airflow的安装:

python -m venv airflow_venv
source airflow_venv/bin/activate  # Linux/macOS
# 或者
# airflow_venv\Scripts\activate  # Windows

2. 安装Airflow[编辑 | 编辑源代码]

使用pip安装Airflow,指定版本以避免兼容性问题:

pip install "apache-airflow==2.3.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.0/constraints-3.7.txt"

3. 初始化数据库[编辑 | 编辑源代码]

Airflow需要一个数据库来存储元数据。初始化数据库:

airflow db init

此命令会创建SQLite数据库(默认)和必要的表结构。

4. 创建用户[编辑 | 编辑源代码]

为Web界面创建管理员用户:

airflow users create \
    --username admin \
    --firstname First \
    --lastname Last \
    --role Admin \
    --email admin@example.com

5. 启动服务[编辑 | 编辑源代码]

启动Web服务器(默认端口8080):

airflow webserver --port 8080

在另一个终端启动调度器:

airflow scheduler

配置Airflow[编辑 | 编辑源代码]

Airflow的主要配置文件是`airflow.cfg`,位于`~/airflow`目录。重要的配置项包括:

  • `executor`: 设置执行器类型(单机部署常用LocalExecutor)
  • `sql_alchemy_conn`: 数据库连接字符串
  • `dags_folder`: DAG文件的存放位置

使用LocalExecutor[编辑 | 编辑源代码]

要使用LocalExecutor(允许并行执行任务),修改`airflow.cfg`:

executor = LocalExecutor

然后重新初始化数据库:

airflow db init

验证安装[编辑 | 编辑源代码]

访问Web界面(http://localhost:8080)并使用之前创建的用户登录。你应该能看到Airflow的仪表盘。

运行示例DAG:

airflow dags list

实际案例[编辑 | 编辑源代码]

以下是一个简单的DAG示例,展示如何在单机部署中使用Airflow:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    'example_dag',
    default_args=default_args,
    description='一个简单的示例DAG',
    schedule_interval=timedelta(days=1),
    start_date=datetime(2023, 1, 1),
    catchup=False,
) as dag:

    t1 = BashOperator(
        task_id='print_date',
        bash_command='date',
    )

    t2 = BashOperator(
        task_id='sleep',
        bash_command='sleep 5',
        retries=3,
    )

    t1 >> t2

将此文件保存为`~/airflow/dags/example_dag.py`,Airflow将自动加载它。

架构图[编辑 | 编辑源代码]

以下是单机部署的Airflow架构示意图:

graph TD A[Web Server] --> B[Metadata Database] C[Scheduler] --> B D[LocalExecutor] --> B D --> E[Worker] C --> D A --> C

常见问题[编辑 | 编辑源代码]

端口冲突[编辑 | 编辑源代码]

如果8080端口被占用,可以使用其他端口启动Web服务器:

airflow webserver --port 8081

数据库问题[编辑 | 编辑源代码]

要使用PostgreSQL代替SQLite:

1. 安装PostgreSQL和Python适配器:

pip install psycopg2-binary

2. 修改`airflow.cfg`:

sql_alchemy_conn = postgresql+psycopg2://user:password@localhost/airflow

3. 重新初始化数据库。

性能考虑[编辑 | 编辑源代码]

对于生产环境,单机部署可能遇到以下限制:

  • 任务并行度受限于单机资源
  • 无高可用性
  • 扩展性有限

对于生产环境,应考虑分布式部署(如CeleryExecutor或KubernetesExecutor)。

结论[编辑 | 编辑源代码]

Airflow单机部署是学习和测试Airflow的理想方式。通过本文的步骤,用户可以快速搭建一个功能完整的Airflow环境,并开始创建工作流。虽然单机部署不适合大规模生产环境,但它为理解Airflow的核心概念和功能提供了坚实的基础。