Кажется, я не понимаю, как импортировать модули в файл определения DAG воздушного потока APA. Я хотел бы сделать это, чтобы создать библиотеку, которая, например, объявляет задачи с похожими настройками менее подробными.
Вот простейший пример, который я могу вспомнить, что реплицирует проблему: я изменил учебник воздушного потока (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
печатается на консоль, как и ожидалось. Все выглядит хорошо.
Затем я Broken DAG: [/home/airflow/airflow/dags/tutorial.py] No module named 'lib'
к веб-интерфейсу и приветствую Broken DAG: [/home/airflow/airflow/dags/tutorial.py] No module named 'lib'
. Отказ от дага и попытки ручного запуска с использованием пользовательского интерфейса заставляют "работать" статус, но он никогда не преуспевает или не сработает. Он просто сидит на "беге" навсегда. Я могу стоять в очереди столько, сколько захочу, но они все будут сидеть на "запущенном" статусе.
Я проверил журналы воздушного потока и не вижу там никакой полезной отладочной информации.
Так что я пропущу?