airflow使用pip或docker compose安装

本文记录当前airflow的两种安装方式,当前最新版本为2.5.1

注:就目前而言,airflow版本大于2.3.0时,官方推荐python的版本为3.7-3.10,3.11暂不支持。

使用pip安装

  1. 安装python

  2. 创建虚拟环境

    1
    2
    3
    4
    5
    # 方式1
    pyenv virtualenv 3.9.10 venvAirflow

    # 方式2
    python -m virtualenv venvAirflow
  3. 安装airflow

默认会安装在~/airflow下,可通过指定环境变量修改,如:export AIRFLOW_HOME=~/airflow

1
2
# 只包含启动的基础部分内容,扩展包其它方式安装,参照官网
pip install apache-airflow
  1. 初始化数据库,默认使用sqlite存储元数据,仅用于测试环境。生产环境下的并发支持需用mysql或psql

    1
    airflow db init

    初始用户为admin,密码见同目录下文件standalone_admin_password.txt

  2. 启动web服务器

两种方式启动

  • 一键启动:

    1
    airflow standalone
  • 手动运行airflow各个部分:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    airflow db init

    airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email spiderman@superhero.org

    airflow webserver --port 8080

    airflow scheduler
  1. 访问web界面

访问http://localhost:8080,将看到web界面

通过docker-compose安装

  1. 检查内存是否足够

官方建议至少为docker engine分配4GB内存,最好是8GB,通过下述命令检测。

1
docker run --rm "debian:bullseye-slim" bash -c 'numfmt --to iec $(echo $(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE))))'
  1. 下载docker-compose.yaml
    1
    curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
    该文件定义了多个服务:
  • airflow-scheduler:调度程序监视所有任务和DAGs,并在任务实例的依赖关系完成后触发
  • airflow-webserver:http://localhost:8080
  • airflow-worker:执行调度程序分配的任务
  • airflow-init:初始化服务
  • postgres:数据库
  • redis:消息从scheduler转发到worker的代理broker
  • flower:环境监控,http://localhost:5555
  1. 创建挂载目录及用户设置

    1
    2
    mkdir -p ./dags ./logs ./plugins
    echo -e "AIRFLOW_UID=$(id -u)" > .env
  2. 初始化数据库

    1
    2
    3
    4
    5
    6
    7
    docker compose up airflow-init

    # 当初始化完成将看到下述输出
    # airflow-init_1 | Upgrades done
    # airflow-init_1 | Admin user airflow created
    # airflow-init_1 | 2.5.1
    # start_airflow-init_1 exited with code 0

    初始化用户密码为airflow/airflow

  3. 运行airflow

    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker-compose up

    # 执行docker-compose ps -a看到下述输出则说明正常运行
    # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    # 247ebe6cf87a apache/airflow:2.5.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-worker_1
    # ed9b09fc84b1 apache/airflow:2.5.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-scheduler_1
    # 7cb1fb603a98 apache/airflow:2.5.1 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8080->8080/tcp compose_airflow-webserver_1
    # 74f3bbe506eb postgres:13 "docker-entrypoint.s…" 18 minutes ago Up 17 minutes (healthy) 5432/tcp compose_postgres_1
    # 0bd6576d23cb redis:latest "docker-entrypoint.s…" 10 hours ago Up 17 minutes (healthy) 0.0.0.0:6379->6379/tcp compose_redis_1
  4. 如何使用

在启动airflow后,有以下三种使用方式:

  • 通过CLI命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 同样可以使用CLI命令
    docker-compose run airflow-worker airflow info

    # 或者下载官方提供的命令包装脚本
    curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/airflow.sh'
    chmod +x airflow.sh

    ./airflow.sh info

    # 同时支持进入交互式bash shell,或进入python容器
    ./airflow.sh bash

    ./airflow.sh python
  • 通过Web页面

使用预设用户密码airflow/airflow进入web页面http://localhost:8080

  • 使用REST API接口

如下命令简单参考,更详细可查阅官方文档

1
2
3
4
ENDPOINT_URL="http://localhost:8080/"
curl -X GET \
--user "airflow:airflow" \
"${ENDPOINT_URL}/api/v1/pools"
  1. 清除

若要停止和删除容器,删除数据卷及镜像的话可参考下述命令:

1
docker-compose down --volumes --rmi all