繁体   English   中英

Apache Airflow Celery Executor: Import a local custom python package

[英]Apache Airflow Celery Executor: Import a local custom python package

我正在使用 Bitnami 的预打包 Airflow 多层架构,在这里可以找到:

https://azure.microsoft.com/en-us/blog/bitnami-apache-airflow-multi-tier-now-available-in-azure-marketplace/

以下是他们对如何跨节点共享 DAGS 的看法:

所有节点都有一个共享卷来同步 DAG 文件。

DAG 文件存储在节点的目录中。 此目录是安装在所有节点(工作程序、调度程序和 web 服务器)中相同位置的外部卷。 由于它是共享卷,因此文件会在服务器之间自动同步。 从此共享卷中添加、修改或删除 DAG 文件,整个 Airflow 系统将被更新。

所以,我已经这样设置了我的 dag 目录:

/opt/bitnami/airflow/dags
|
├── dag.py
└── package
      ├── __init__.py
      └── module.py 

这是我的 DAG 中导入的样子:

from package.module import something

但我得到这个错误:

Broken DAG: [/opt/bitnami/airflow/dags/dag.py] No module named 'package'

我已经阅读了其他线程,并尝试了这些解决方案,但似乎没有任何效果。 我使用 celery 执行器的事实有什么改变吗? 我是新来的,如果您需要更多详细信息,请告诉我。

好吧,我找到了解决方案。

首先,我发现了 airflow 插件管理器。 看起来它主要用于构建您自己的自定义运算符、钩子等,但我想我可以将它用于我的场景。

于是我查看了bitnami提供的airflow.cfg文件,看到了参数:

plugins_folder=/opt/bitnami/airflow/plugins

这个目录在机器中不存在,所以我创建了它并将我的 package 放在那里(没有对其进行任何更改)。

然后,我重新启动了 web 服务器节点调度程序节点以获取此更改。

现在我可以像以前一样在我的 DAG 脚本中运行导入,没有任何问题:

from package.module import something

对我来说,接下来的步骤是将这个插件文件夹与包含我们包的存储库同步,就像我同步在这里找到的 DAGS 文件夹一样:

https://docs.bitnami.com/azure-templates/infrastructure/apache-airflow/configuration/sync-dags/

我不确定插件文件夹是否打算以这种方式使用,但这有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM