【问题标题】:Airflow Import Issue气流导入问题
【发布时间】:2021-02-02 10:18:38
【问题描述】:

我们已经配置了气流,并且有两个气流 dag 工作正常。我创建了一个新的 dag,并且可以在 Airflow UI 中看到相同的内容。但是当我尝试从 UI 打开 Airflow Dag 时,它给了我以下错误 “DAG 似乎不见了”。

我尝试使用以下方式解决问题:

  1. 首先,我尝试运行我的管道 py 文件,看看它是否有任何问题:
     python sample_dag_pipeline.py
['/home/airflow/airflow-install/dags/ABC_Middleware', '/home/airflow/airflow-install/dags', '/home/airflow/airflow-install/sample_folder/bin/python', '/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/home/airflow/airflow-install/sample_folder/lib64/python3.6/site-packages', '/home/airflow/airflow-install/sample_folder/lib/python3.6/site-packages']

它似乎工作正常。

  1. 然后我尝试运行:airflow list_dags 它给了我以下错误
  (env) [airflow@Airflow-VM dags]$ airflow list_dags
[2021-02-02 08:41:34,503] {__init__.py:50} INFO - Using executor LocalExecutor
[2021-02-02 08:41:34,507] {dagbag.py:417} INFO - Filling up the DagBag from /home/airflow/airflow-install/dags
['/home/airflow/airflow-install/sample_folder/bin', '/home/airflow/airflow-install/dags/AirflowMiddleware', '/home/airflow/airflow-install/sample_folder/bin/python', '/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/home/airflow/airflow-install/sample_folder/lib64/python3.6/site-packages', '/home/airflow/airflow-install/sample_folder/lib/python3.6/site-packages', '/home/airflow/airflow-install/dags', '/home/airflow/airflow-install/config', '/home/airflow/airflow-install/plugins']
[2021-02-02 08:41:35,044] {dagbag.py:259} ERROR - Failed to import: /home/airflow/airflow-install/dags/sample_dag_pipeline.py
Traceback (most recent call last):
 File "/home/airflow/airflow-install/sample_folder/lib64/python3.6/site-packages/airflow/models/dagbag.py", line 256, in process_file
   m = imp.load_source(mod_name, filepath)
 File "/usr/lib64/python3.6/imp.py", line 172, in load_source
   module = _load(spec)
 File "<frozen importlib._bootstrap>", line 684, in _load
 File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
 File "<frozen importlib._bootstrap_external>", line 678, in exec_module
 File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
 File "/home/airflow/airflow-install/dags/sample_dag_pipeline.py", line 8, in <module>
   from abc.def.gef import sample_dag_jobs
ImportError: cannot import name 'sample_dag_jobs'


-------------------------------------------------------------------
DAGS
-------------------------------------------------------------------
ABC_V01
DEF_V01

让我显示我的 sample_dag_pipeline.py 文件:

(env) [airflow@Airflow-VM dags]$ cat sample_dag_pipeline.py | head -20

import sys
import traceback
from importlib import reload

sys.path.insert(0, "/home/airflow/airflow-install/dags/ABC_Middleware")

from datetime import datetime
from abc.def.gef import sample_dag_jobs

dagutils = reload(cai_jobs_pipeline)

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator
from airflow.utils.trigger_rule import TriggerRule

DAG_NAME = "ABC_DataPipeline_V1.0"

观察:

所以在上面的 sample_dag_pipeline.py 文件中,我指的是其他目录(ABC_Middleware)中的代码,首先将其添加到 sys 路径中,然后从中导入模块。 我对我的另外两个 dag(ABC_V01,DEF_V01)做了同样的事情,它工作正常,但对于这个它不是。

当我运行 py 文件时,它会打印出 sys 路径,我可以看到添加到 sys 中的路径。('/home/airflow/airflow-install/dags/ABC_Middleware')

但是当我在 sys 路径中运行 airflow list_dags 时,我看不到我的目录的 sys 路径('/home/airflow/airflow-install/dags/ABC_Middleware')

我尝试了很多选项,但似乎都只是卡在这里。谁能提出可能发生的事情?

【问题讨论】:

    标签: python python-3.x airflow airflow-scheduler


    【解决方案1】:

    这可能是一个问题,因为您使用 abc 作为一个包,它与 built-in stdlib module of the same name 冲突,并且由于它是在加载 DAG 文件之前由 Airflow 导入的,因此 Python 正在系统下查找更多模块的路径。

    尝试将 abc 重命名为其他名称。

    【讨论】:

      【解决方案2】:
      • 我遇到了类似的问题。当我运行 python my_dag.py 并且还在 python shell 中工作时,导入绝对有效且有效。
      • 重新启动气流服务器为我解决了这个问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 2019-12-15
        • 2021-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多