首页 > 解决方案 > 如何使用 Apache Airflow 中的 DockerOperator

问题描述

这个问题与理解有关 DockerOperator 和 Apache Airflow 的概念有关,所以我不确定这个站点是否正确。如果没有,请让我知道我可以在哪里发布它。

情况如下:我正在使用一台 Windows 笔记本电脑,我开发了一个非常基本的 ETL 管道,该管道从某些服务器中提取数据,并使用 Apache-Airflow 定期将未处理的数据写入 MongoDB。我有一个docker-compose.yml包含三个服务的文件:用于 MongoDB 的 mongo 服务、作为 MongoDB 管理工具的 mongo-express 服务、用于 Apache-Airflow 的网络服务器服务和作为 Apache-Airflow 数据库后端的 postgres 服务。

到目前为止,我已经在函数中开发了一些 Python 代码,这些函数由 Airflow 实例使用 PythonOperator 调用。由于使用 PythonOperator 进行调试非常困难,所以我现在想尝试使用 DockerOperator。我一直在关注本教程,该教程声称使用 DockerOperator,您可以开发独立于操作系统的源代码,由于 Docker 的“构建一次,到处运行”的概念,代码稍后将在其上执行。

我的问题是我没有完全理解使用 DockerOperator 运行代码所需的所有必要步骤。在本教程中,我有以下关于任务开发和部署的问题:

  1. 将工件与所有依赖项一起打包到 Docker 映像中。==> 这是否意味着我必须为每个任务创建一个 Dockerfile,然后使用这个 Dockerfile 构建一个映像?
  2. 从容器中公开一个入口点,以使用 DockerOperator 调用和参数化任务。==> 你是怎么做到的?

感谢您的宝贵时间,我非常感谢!

标签: pythondockerairflow

解决方案


通常,您将拥有一个处理一种任务的 Docker映像。因此,对于任何一个管道,您可能会使用各种不同的 Docker 映像,每一步都有一个不同的映像。

关于您的问题,这里有几个考虑因素,特别是关于部署的问题。

  1. 您需要创建一个 Docker 映像。您可能希望为此添加标签,因为您需要对图像进行版本控制。DockerOperator默认为图像上的标签latest
  2. 该图像需要可用于您部署的 Airflow 实例。如果您想在本地运行 Airflow,它们可以构建在您运行 Airflow 的机器上。如果您已在某处在线部署 Airflow,则更常见的做法是将它们推送到云服务。您可以使用许多提供程序(Docker Hub、Amazon ECR 等)。

从容器中公开一个入口点,以使用 DockerOperator 调用和参数化任务。==> 你是怎么做到的?

如果您已经构建了映像,并且可用于 Airflow,您只需要使用以下命令创建一个任务DockerOperator

dag = DAG(**kwargs)
task_1 = DockerOperator(
    dag=dag,
    task_id='docker_task',
    image='dummyorg/dummy_api_tools:v1',
    auto_remove=True,
    docker_url='unix://var/run/docker.sock',
    command='python extract_from_api_or_something.py'
)

我建议花一些时间来了解 Docker。一开始有点难以理解,但它是一个非常有价值的工具,尤其是对于像 Airflow 这样的系统。


推荐阅读