Docker Airflow 简介

什么是 Docker Airflow?

Docker Airflow 是基于 Docker 容器化技术的一个开源任务调度和工作流管理平台。Airflow 提供了一种简单而灵活的方式来编排、调度和监控工作流任务。它允许用户使用 Python 编写工作流的代码,并且提供了丰富的任务管理和监控功能。

通过将 Airflow 与 Docker 结合使用,可以将整个工作流任务和依赖项打包为一个 Docker 容器,使得部署和管理工作流变得更加简单和可靠。Docker 提供了一种标准化的容器运行环境,可以确保工作流在不同的环境中具有相同的行为。

Docker 安装与配置

要使用 Docker Airflow,首先需要安装 Docker。可以根据不同操作系统的版本,选择合适的 Docker 安装方式。下面是在 Ubuntu 上安装 Docker 的示例命令:

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

安装完成后,还需要配置当前用户的权限,以便能够使用 Docker 命令:

$ sudo usermod -aG docker $USER

最后,重新登录以使用户组更改生效。

安装 Airflow

安装 Docker 后,我们可以使用 Docker Compose 来安装和运行 Airflow。Docker Compose 是 Docker 的一个工具,它允许用户使用 YAML 文件定义多个容器服务,并通过一个命令来启动、停止和管理这些服务。

首先,创建一个名为 docker-compose.yaml 的文件,并在其中定义 Airflow 服务:

version: '3'
services:
  webserver:
    image: apache/airflow
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - ./dags:/opt/airflow/dags

上述配置文件指定了一个名为 webserver 的服务,使用了 Apache Airflow 的官方镜像,并将容器的 8080 端口映射到主机的 8080 端口。此外,还将主机上的 ./dags 目录挂载到容器中的 /opt/airflow/dags 目录,以便可以在主机上编辑和管理 Airflow 的 DAG(有向无环图)文件。

保存并关闭文件后,使用以下命令启动 Airflow 服务:

$ docker-compose up -d

等待一段时间后,可以通过浏览器访问 http://localhost:8080 来查看 Airflow 的 Web UI。接下来,我们可以通过编写 Python 代码来创建和管理工作流任务。

编写 DAG(有向无环图)文件

DAG 文件是 Airflow 中定义工作流任务的核心组件。它使用 Python 代码来描述任务之间的依赖关系和执行逻辑。下面是一个简单的 DAG 文件示例:

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime

# 定义任务函数
def task1():
    print("Task 1 executed")

def task2():
    print("Task 2 executed")

def task3():
    print("Task 3 executed")

# 创建一个 DAG 对象
dag = DAG(
    'my_dag',
    start_date=datetime(2022, 1, 1),
    schedule_interval='@daily'
)

# 创建三个任务
task_1 = PythonOperator(
    task_id='task_1',
    python_callable=task1,
    dag=dag
)

task_2 = PythonOperator(
    task_id='task_2',
    python_callable=task2,
    dag=dag
)

task_3 = PythonOperator(
    task_id='task_3',
    python_callable=task3,
    dag=dag
)

# 定义任务之间的依赖关系
task_1 >> task_2 >> task_3

上述代码定义了一个名为 my_dag 的 DAG 对象,并设置了每天执行一次的调度间隔。然后,创建了三个任务函数 task1task2task3,它们分别打印不同的任务执行信息。

接下来,使用 PythonOperator 对象来创建三个任务,并使用 >> 运算符来