如何从 Apache Airflow 使用 DockerOperator

Kev*_*sen 8 python docker airflow

这个问题与理解有关 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 调用和参数化任务。==> 你是怎么做到的?

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

小智 6

通常,您将拥有一个处理一种类型任务的 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'
)
Run Code Online (Sandbox Code Playgroud)

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