아파치 에어 플로우 DAG 정의 파일로 모듈을 가져 오는 방법을 이해하지 못하는 것 같습니다. 예를 들어, 비슷한 설정으로 작업을 선언하는 라이브러리를 만들 수 있기를 원합니다.Apache Airflow 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
는 단순한 데프 인 당신이 2를주고, 결과를 출력 어떤 입력 증식하지만, 이것은 수입 문제이기 때문에 분명히 중요하지 않습니다.
튜토리얼 문서에 따라 airflow test tutorial print_date 2015-06-01
을 성공적으로 실행할 수 있습니다. 즉, dag가 실행되고 print_double이 성공합니다. 4
이 예상대로 콘솔에 인쇄됩니다. 모두 잘 나타납니다.
그런 다음 웹 UI로 이동하여 Broken DAG: [/home/airflow/airflow/dags/tutorial.py] No module named 'lib'
으로 인사합니다. dag를 일시 중단 해제하고 UI를 사용하여 수동 실행을 시도하면 "실행 중"상태가되지만 결코 성공 또는 실패하지 않습니다. 그것은 단지 영원히 "달리기"에 있습니다. 내가 원하는만큼 많은 큐를 대기시킬 수 있지만 모두 "실행 중"상태에 머무를 것입니다.
공기 흐름 로그를 확인 했으므로 유용한 디버그 정보가 보이지 않습니다.
그래서 나는 무엇을 놓치고 있습니까?
이것은 나의 지역에서 이것을 테스트했고 작동했습니다; 적절한 디렉토리에 파일을 가지고 있습니까? dag 폴더에 실제로 있지 않은 tutorial.py 파일을 편집 할 수 있습니까? 경로는 두 개의 "airflow"가있는 것으로 보입니다./home/airflow/airflow/dags/tutorial.py' – listik
컨텍스트가이 문제로 전환되었지만 완전히 신선한 공기 흐름을 시도합니다. VM이되고 기회가 생기면 다시 복제하려고합니다. 그러나 나는'airflow'가 사용자 이름이고'airflow/airflow'가 설치 디렉토리라는 것을 확인할 수 있습니다. 그래서 적어도 그 부분은 문제가 아닙니다. 나는 또한 디렉토리 구조가 질문에 게시 된 것과 같은'cd '로 확인 할 수 있습니다. 그러나 나는 당신이 그것이 당신을 위해 일한다고 말하고 있기 때문에 나의 실사를하고 고립 된 환경에서 모든 것을 복제 할 것입니다. – fildred13