【发布时间】:2017-12-27 20:55:35
【问题描述】:
我似乎不明白如何将模块导入 apache 气流 DAG 定义文件。例如,我希望这样做是为了能够创建一个库,使声明具有类似设置的任务不那么冗长。
这是我能想到的复制问题的最简单示例:我修改了气流教程 (https://airflow.apache.org/tutorial.html#recap) 以简单地导入一个模块并从该模块运行一个定义。像这样:
目录结构:
- dags/
-- __init__.py
-- lib.py
-- tutorial.py
tutorial.py:
"""
Code that goes along with the Airflow located at:
http://airflow.readthedocs.org/en/latest/tutorial.html
"""
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
# Here is my added import
from lib import print_double
# And my usage of the imported def
print_double(2)
## -- snip, because this is just the tutorial code,
## i.e., some standard DAG defintion stuff --
print_double 只是一个简单的 def,它将您提供的任何输入乘以 2,并打印结果,但显然这甚至无关紧要,因为这是一个导入问题。
我能够按照教程文档成功运行airflow test tutorial print_date 2015-06-01 - dag 运行,而且 print_double 成功。 4 按预期打印到控制台。一切看起来都很好。
然后我进入 Web UI,并受到Broken DAG: [/home/airflow/airflow/dags/tutorial.py] No module named 'lib' 的欢迎。取消暂停 dag 并尝试使用 UI 手动运行会导致“正在运行”状态,但它永远不会成功或失败。它只是永远“运行”。我可以随心所欲地排队,但他们都只是处于“运行”状态。
我检查了气流日志,但没有看到任何有用的调试信息。
那么我错过了什么?
【问题讨论】:
-
在我的本地测试过它并且有效;你确定你有正确的目录中的文件吗?你能编辑一个不在 dag 文件夹中的 tutorial.py 文件吗?路径看起来很狡猾,有两个“气流”:
/home/airflow/airflow/dags/tutorial.py -
我已经关闭了这个问题的上下文,但我会尝试在虚拟机中安装全新的气流,并在有机会时尝试再次复制。但是我可以确认
airflow是用户名,airflow/airflow是安装目录,所以至少那部分不是问题。我也可以通过cding 确认目录结构与问题中发布的一样。但我会尽我所能,在一个孤立的环境中复制整个事情,因为你说它对你有用。
标签: python airflow apache-airflow