Airflow Local Path 관련 이슈 정리
다음 학습인 DAGs 폴더에 파이썬 스크립트인 .py 파일을 업로드 하고, airflow webserver 에서 확인해보면 업로드 되어있어야 할 스크립트 파일이 없는 상황이었다.
보통 이러한경우는 크게 2가지로 나뉜다고 한다.
1. 스크립트파일(.py) 파일 자체 코드가 실행했을 때, 정상적으로 실행이 안되는 경우
2. DAGs 경로들이 제대로 인식되지 않은 경우
우선, 첫 번째 스크립트 파일을 뜯어보았다.
책 예제에서 보여주는 'download_rocket_launches.py' 파일이었고, 실행해보니 start_date 관련해서 오류가 발생했다.
(해당 코드는 책에서 제공되는 git 을 로컬에 clone하여 받은 파일이다.)
Error Message :
RemovedInAirflow3Warning: Function `days_ago` is deprecated and will be removed in Airflow 3.0. You can achieve equivalent behavior with `pendulum.today('UTC').add(days=-N, ...)`
[ 기존 코드 ]
dag = DAG(
dag_id="download_rocket_launches",
description="Download rocket pictures of recently launched rockets.",
start_date=airflow.utils.dates.days_ago(14),
schedule_interval="@daily",
)
[ 수정 코드 ]
local_tz = pendulum.timezone("Asia/Seoul")
dag = DAG(
dag_id="download_rocket_launches",
description="Download rocket pictures of recently launched rockets.",
# start_date=airflow.utils.dates.days_ago(14),
start_date=pendulum.today('UTC').add(days=-1).replace(tzinfo=local_tz),
schedule_interval="@daily",
)
수정 코드로 반영하여 직접 실행하니, 해당 코드가 잘 돌아간 것을 확인할 수 있었다.
그럼에도 Web server에서는 해당 스크립트 Dag가 보이지 않았다.
하여, 2번째 방법을 시도해보았다.
2번째 방법도 2개 경로 부분을 수정해줘야 했다.
- 'airflow.cfg' 파일의 dags 경로 수정
- 로컬 터미널에서 export 로 airflow home 설정
위 dags_folder 부분을 올리고자 하는 dags 가 존재하는 파일 경로로 바꾸었다.
export AIRFLOW_HOME=/Users/yooinho/Desktop/study/00.airflow/home
해당 명령어로 export 해서 체크해보았다.
(추후 알게된 사실이지만...export 하면 해당 shell 에서만 적용된다는....)
우선 위 2 순서를 마무리 하고 다시 실행해보니...여전히 보이지 않고 있었다.
[ In My Case ]
1. airflow dags list 명령어를 통해 현재 해당 Dags 가 어디서 불러오는지 확인
→ 'download_rocket_launches.py' 파일이 보이긴 하는데 왜 못 불러오는 건지...이해가 안되는 상황
→ airflow dags list-import-errors 해당 명령어로 import 에러를 확인
뭔가....경로가 꼬여도 단단히 꼬인 느낌이 들었다.
→ 우선 중복되어 있는 것 하나를 제거하고 나니 에러 메시지가 보이진 않았고, 여전히 Web server에서는 보이지 않고 있다.
2. 실제 airflow가 바라보고 있는 경로는 무엇인지 확인
→ airflow config list 명령어를 통해 실제 경로 확인
→ 보면 내가 바꾼 dags 폴더 빼고는 모두 다 다른 airflow home을 바라보고 있는 것을 확인했다.
→ airflow info 명령어를 통해서도 확인이 가능
3. home 을 바라보는 경로들을 수정
→ vi ~/.bash_profile 에서 export를 수정하고, 적용 후 재 실행
모든 경로들이 일치한 것을 확인할 수 있었다.