인프런 커뮤니티 질문&답변

05305님의 프로필 이미지
05305

작성한 질문수

Airflow 마스터 클래스

bashoperator에 외부 쉘파일 수행하기

해결된 질문

작성

·

393

·

수정됨

0

1.PNG2.PNG3.PNG4.PNG

안녕하세요 강사님~

airflow를 이제 막 배우는 학생입니다.

다름이 아니라 bashoperator에 외부 쉘파일 수행하기에서 airflow에서 dag을 실행하면 해당 경로를 찾을 수 없다고 나와서요

제가 root 계정으로 실습 진행하고 있는데 opt를 root 경로로 바꿔봐도 동일한 증상이 계속됩니다.

추가로 py 코드에서 경로를 왜 opt로 주셨는지도 궁금합니다!

답변 1

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 05305님

맨 아래 캡처하신 것이 WSL 내 디렉토리 정보인거죠?

현재 WSL의 /root/airflow/plugins 디렉토리가 있다면 이것을 컨테이너와 연결하기 위해서는 아래처럼 작성되어야 합니다.

- /root/airflow/plugins:/opt/airflow/plugins

콜론(:)을 기준으로 왼쪽이 WSL의 볼륨, 오른쪽이 컨테이너의 볼륨이죠.

지금 05305님의 경우 강의 내용처럼 아래 그대로 적용되어 있습니다.

- ${AIRFLOW_PROJ_DIR:-.}/airflow/plugins:/opt/airflow/plugins

이것은 WSL의 {yaml파일이 존재하는 디렉토리}/airflow/plugins 디렉토리를 컨테이너와 연결하는 것이므로 /root/airflow/plugins 디렉토리가 컨테이너와 연결되지는 못합니다.

 

그리고 두 번째 질문주신것은

airflow 도커이미지는 기본적으로 /opt/airflow 경로가 Airflow의 홈 경로입니다.

즉 환경변수로는 $AIRFLOW_HOME=/opt/airflow 입니다. 컨테이너 안으로 들어가서 환경변수를 보면 알 수 있습니다.

image

강의 뒷부분에서 다루겠지만 airflow의 홈디렉토리 아래의 plugins 디렉토리나 config 디렉토리, dags 디렉토리는 airflow가 DAG 실행시 기본적으로 PYTHON PATH로 인식하게 됩니다.

그래서 /opt/airflow 아래에 dag 디렉토리, plugins 디렉토리, config 디렉토리 등을 연결해주는 것입니다.

컨테이너로 airflow를 실행하는한 plugins나 dags, config 디렉토리는 /opt/airflow 경로 아래에 둬야 합니다.

마지막으로 05305님이 언급하신

제가 root 계정으로 실습 진행하고 있는데 opt를 root 경로로 바꿔봐도 동일한 증상이 계속됩니다.

요것은 지금 yaml의 volumes 항목의 의미에 대해서 헷갈리신것 같은데요. 첫 문장에서 설명한 것이긴 한데 다시 한번 말씀드리자면 콜론(:)을 기준으로 왼쪽이 연결할 WSL의 볼륨, 오른쪽이 연결될 컨테이너의 볼륨입니다.

따라서 WSL상에 존재하는 /root/airflow/plugins 경로를 왼쪽에 입력해야 하는 겁니다.

 

이해 되셨을까요?

아직 이해 안되셨음 언제든지 질문 또 남겨주세요 ^^

05305님의 프로필 이미지
05305
질문자

안녕하세요~

어제까지는 분명 안 됐는데 오늘 다시 실행하더니 되네요ㅠㅠ

yaml파일이 root 디렉토리 안에 있어서 wsl의 볼륨을 수정하지 않아도 실행이 됐던 것 같습니다.(어제 안된 이유는 모름ㅠ)

볼륨의 경로의 의미를 정확하게 이해하지 못 했는데 답변 덕분에 yaml 기준의 경로라는것을 완벽 이해할 수 있었습니다.

 

다시 한 번 좋은 강의 감사드리며 끝까지 달려보겠습니다!

김현진님의 프로필 이미지
김현진
지식공유자

네 잘 해결되셨다니 다행이네요.

화이팅입니다 ^^

05305님의 프로필 이미지
05305

작성한 질문수

질문하기