如何在气流中设置多个Dag目录

时间:2017-04-04 22:33:17

标签: python airflow

我为不同的python项目设置了不同的气流dags,即一个父dags文件夹-bash: /Users/USERNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin:/Users/USERNAME/miniconda2/bin:/Users/USERNAME/miniconda2/bin:/Users/USERNAME/miniconda2/bin: No such file or directory ,其中包含基于不同python项目的DAG子文件夹:/vol/dags其中/vol/dags/project1/project1.py, /vol/dags/project2/project2.py

例如,

DAGS_FOLDER = /vol/dags从同一目录中的另一个python文件导入一个函数,即project1.py。但是当我启动airflow网络服务器时,我得到一个/vol/dags/project1/mycalculator.py

ImportError

我尝试将/vol/dags/project1/$ airflow webserver -p 8080 INFO - Filling up the DagBag from /vol/dags/ ERROR - Failed to import: /vol/dags/project1/project1.py Traceback (most recent call last): File "/Users/xxx/anaconda/lib/python2.7/site-packages/airflow/models.py", line 247, in process_file m = imp.load_source(mod_name, filepath) File "/vol/dags/project1/project1.py", line 10, in <module> from mycalculator import * ImportError: No module named mycalculator 导入mycalculator.py,如下所示:

project1.py

3 个答案:

答案 0 :(得分:2)

文件夹/vol/dags/project1/缺少__init__.py个文件。

此文件可以为空。

添加此文件,然后在project2.py中,您应该能够:

import project1.mycalculator.*

有关套餐的详情,请参阅此处: https://docs.python.org/2/tutorial/modules.html#packages

答案 1 :(得分:2)

您可以使用packaged dag概念为不同的项目提供不同的dag文件夹。您只需要将每个项目的zip放在您的父dag文件夹中即可。

通过这种方式,您可以轻松地将dag及其依赖项组合在一起,并且dag文件夹整洁干净,因为它仅包含每个项目的zip。

您可以创建一个如下所示的zip:

my_dag1.py
my_dag2.py
package1/__init__.py
package1/functions.py

您的父dag文件夹可能如下所示:

project1.zip
project2.zip
my_dag3.py

答案 2 :(得分:0)

这里有同样的问题。

事实上,我们的进口工作,因为在气流背景下,DAG_FOLDER已被添加到PYTHONPATH。 要添加的init 的.py在PROJECT1 /不会改变任何东西。

一个很好的解决方案可以是使用相对导入,如

from .mycalculator import *

但是相对进口目前无法正常工作,因为气流是如何进口Dags的(气流开发人员向我解释了)

因此,对我而言,最简单的解决方案是将dags文件保留在根目录中,并在它们前面加上“ project1_”或“ project2_”,然后将像mycalculator这样的libs放在子文件夹中。