【问题标题】:How DAGs should be run when airflow deployed with docker compose使用 docker compose 部署气流时应如何运行 DAG
【发布时间】:2021-07-11 21:04:14
【问题描述】:

当 DAG 依赖于 compose 文件中定义的其他服务(单独的 python venv)时,我正试图围绕 DAG 应该如何在 docker compose 环境中实际执行。

我已经通过 docker compose 设置了气流,如 official documentation 中所述。另外,我添加了一个 Django 服务,它有自己的依赖项。

现在,我想要一个 DAG,它使用 Django 的服务 python 环境执行 python 脚本(它也使用 Django 的模型。不确定这是否相关)。
我看到它工作的唯一方法是使用 DockerOperator,如 here 所述。我设法设置并执行了那里提到的测试 DAG,但是当我尝试运行真正的任务时,由于网络问题,它失败了。我很有信心我可以解决这个问题,但是这样设置似乎太麻烦了。

所以,最后我想我想知道通过 compose 使用 Airflow 时理想的架构应该是什么?应该使用我的 Django 服务扩展基本气流图像(创建一个大图像)还是有更好的方法?

【问题讨论】:

    标签: python airflow


    【解决方案1】:

    您可以使用 PythonVirtualEnvOperator (https://airflow.apache.org/docs/apache-airflow/stable/howto/operator/python.html#pythonvirtualenvoperator) - 但每次运行任务时它都会重新创建 django virtualenv,所以并不理想

    另一种选择是运行 DockerOperator 或 KubernetesPodOperator(如果您使用 Kubernetes)并安装单独的 Django 映像(甚至是基础 Django 映像)。

    将 Django 添加到 Airflow 可能不是最好的主意 - 当 Airflow 与所有提供程序一起安装时,大约有 500 个依赖项,因此您可能会遇到一些难以解决的冲突。

    对于 Airlfow 2.2 及更高版本,我们考虑的另一件事是更好地处理缓存,这有助于构建可缓存的虚拟环境,创建一次并在工作人员/pod 之间共享(但这只是在讨论阶段)

    您可以查看明天的 Airflow Summit 会议,我们将在其中讨论即将发生的事情(通常 Airflow Summit 很酷):

    https://airflowsummit.org/sessions/2021/looking-ahead-what-comes-after-airflow-2/

    【讨论】:

    • 感谢您的回答,但我不确定它是否能完全帮助我,因为它没有解决 docker compose 问题。我相信不能使用 PythonVirtualEnvOperator,因为我不能指定 Django 服务环境的路径,对吧?或者你的意思是应该创建一个单独的venv?关于 DockerOperator - 这应该可以工作,但必须手动处理网络,因为 Operator 不会连接到现有的 docker compose 容器,而是会创建一个新容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2017-09-06
    • 2016-12-09
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多