inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Airflow 마스터 클래스

Task 실행관련 질문입니다.

해결된 질문

702

purione1

작성한 질문수 1

0

안녕하세요!

'Bash Operator & 외부 쉘파일 수행하기' 강의를 듣고 실습하던 중 에러가 생겨서, 해결을 시도했는데 계속해서 실패해서 질문을 남겨봅니다!

airflow를 실행하고 태스크를 수행하면 fail이 뜨는데, 로그를 확인하면 파일을 찾을 수 없다고 합니다.

 [2023-10-12, 14:12:25 KST] {subprocess.py:93} INFO - /bin/bash: line 1: /opt/***_log/plugins/shell/select_fruit.sh: No such file or directory
[2023-10-12, 14:12:25 KST] {subprocess.py:97} INFO - Command exited with return code 127
[2023-10-12, 14:12:25 KST] {taskinstance.py:1935} ERROR - Task failed with exception
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/operators/bash.py", line 210, in execute
    raise AirflowException(
airflow.exceptions.AirflowException: Bash command failed. The command returned a non-zero exit code 127.

 

저는 wsl에 디렉토리는 아래 경로처럼 설정했습니다.(select_fruit.sh파일에 실행 권한도 주었습니다.)

/airflow_log/plugins/shell/select_fruit.sh

 

이후 docker-compose.yaml에 volumes 항목을 아래와 같이 설정을 했습니다.

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

 

Vscdoe에서 경로는 아래와 같이 설정을 했습니다.

t1_orange = BashOperator(
        task_id="t1_orange",
        bash_command="/opt/airflow_log/plugins/shell/select_fruit.sh ORANGE",
        
    )
    
    t2_banana = BashOperator(
        task_id="t2_banana",
        bash_command="/opt/airflow_log/plugins/shell/select_fruit.sh BANANA",
    )

경로 문제인지, 아니면 다른 문제인지.. 도움 요청해봅니다.

저에게 너무 필요한 강의라서 잘 듣고 있습니다! 앞으로도 좋은 강의 부탁드리겠습니다!

python 데이터-엔지니어링 airflow

답변 1

0

김현진

안녕하세요 pruione1님

task 실패한 이유는 docker-compose.yaml 파일의 volumes 항목에서 연결한 디렉토리와 dag이 바라보는 디렉토리가 다르기 때문입니다.

docker-compose.yaml 파일에는 아래와 같이 작성돼있죠?

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

따라서 WSL에서 작성한

$HOME/airlfow_log/plugins/shell/select_fruit.sh 디렉토리는

컨테이너에서 보면

/opt/airflow/plugins/shell/select_fruit.sh 에 위치하게 됩니다.

따라서 워커 컨테이너가 쉘 파일을 바라보도록 하기 위해 아래와 같이 수정해야 합니다.

bash_command="/opt/airflow_log/plugins/shell/select_fruit.sh ORANGE"
↓
bash_command="/opt/airflow/plugins/shell/select_fruit.sh ORANGE"

 

그럼 dag 내용은 이렇게 수정해야겠죠?

t1_orange = BashOperator(
        task_id="t1_orange",
        bash_command="/opt/airflow/plugins/shell/select_fruit.sh ORANGE",
        
    )
    
    t2_banana = BashOperator(
        task_id="t2_banana",
        bash_command="/opt/airflow/plugins/shell/select_fruit.sh BANANA",
    )

한번 해보시고 혹시 안되시면 또 남겨주세요 ^^

 

0

purione1

자세한 답변 감사합니다! 제가 잘못 이해하고 있었네요!

pykrx 회원제 전환으로 인한 실습 불가

0

102

2

수료증 발급

0

78

3

에러 발생 관련 질문드립니다.

0

77

2

vscode 작업화면에 오류가 발생하지 않습니다.

0

68

2

plugins 폴더 생성

0

73

2

WSL에서 git push 가 안되요 ㅠ

0

107

2

chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.

0

65

2

github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ

0

705

2

설치중인데 venv를 꼭 써야할까요?

0

119

2

설치 버전 관련 질문입니다.

0

66

1

우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?

0

60

1

DAG 만들기 중 airflow 패키지 로드 에러

0

104

2

3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!

0

94

3

task_id 사용법이 뭔가 바뀐 것 같습니다.

0

75

3

email operator 오류 관련

0

63

2

plugins 폴더 관련

0

91

2

bash operator 관련 문의입니다

0

77

3

스케쥴러 - DAG 파싱 부하 줄이는 과정 질문

0

78

2

Dags refresh 주기 관련 질문

0

123

2

wsl 관련 질문입니다.!

0

72

2

macOS에서 docker 설치

0

92

2

템플릿 변수에 대한 오류

0

58

2

custom_image 디렉토리 문의드립니다.

0

51

2

ETL 인터뷰 관련 문의

0

100

2