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

박희진님의 프로필 이미지

작성한 질문수

Airflow 마스터 클래스

Bash operator DAG 만들기 & DAG 디렉토리 셋팅

task가 실행되지 않습니다.

23.11.01 01:03 작성

·

1.2K

0

task가 제대로 수행되지 않습니다

작업의 로그를 확인하면

아래와 같은 메세지만 나타나구요

 

*** Could not read served logs: Request URL is missing an 'http://' or 'https://' protocol.

 

아래에서 저와 같은 증상을 겪은 사람을 찾았습니다만

링크

메모리 사용량을 늘려서 해결했다고만 나타납니다

 

저는 이미 WSL의 메모리를 8GB에 swap도 2GB도 준 상태구요...

 

airflow의 worker 자체의 에러로그를 찾아보았더니 아래와 같이 권한 문제가 나타납니다

[2023-10-31 15:51:22,188: ERROR/ForkPoolWorker-15] [4c24a6e8-1133-46a5-99ac-5fd6bdb3c730] Failed to execute task [Errno 13] Permission denied: '/opt/airflow/logs/dag_id=dags_bash_operator'.

zz5414-airflow-worker-1 | Traceback (most recent call last):

zz5414-airflow-worker-1 | File "/usr/local/lib/python3.8/pathlib.py", line 1288, in mkdir

zz5414-airflow-worker-1 | self._accessor.mkdir(self, mode)

zz5414-airflow-worker-1 | FileNotFoundError: [Errno 2] No such file or directory: '/opt/airflow/logs/dag_id=dags_bash_operator/run_id=manual__2023-10-31T15:51:20.844476+00:00/task_id=bash_t1'

 

worker 컨테이너안의 /opt/airflow/logs/dag_id=dags_bash_operator라는 파일에 권한이 없어서 발생하는 문제로 보입니다. 컨테이너 내부 파일의 권한은 어떻게 설정하는지를 모르겠습니다

 

제가 만든 dag말고도 example_bash_operator도 마찬가지로 실행되지 않고 같은 에러입니다.

 

해결해주실 수 있을까요?

정말 airflow 열심히 배워보려고 했거든요 ㅠㅠ

답변 2

0

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

2023. 11. 01. 21:31

안녕하세요 희진님

혹시 docker-compose.yaml 에 작성한 volumes 항목을 볼 수 있을까요?

WSL의 기본 유저(저의 경우 hjkim)가 도커의 default 유저가 됩니다.

그리고 WSL상에서 root로 만들어진 디렉토리는 도커에서도 root로 보입니다.

따라서 도커에서 root 권한으로 만들어진 디렉토리안에 write할 수 없습니다. (권한이 없으므로)

따라서 우선 확인해보셔야 할 것은

  1. docker-compose.yaml 파일의 volumes 항목에서 컨테이너의 /opt/airflow/logs 와 연결된 WSL의 logs 디렉토리를 확인하고 owner가 무엇인지 보시기 바랍니다.

  2. 만약 WSL의 logs 디렉토리가 root 로 되어있다면 기본 유저로 owner를 변경해주세요.

확인 결과 한번 남겨주세요 ^^

박희진님의 프로필 이미지
박희진
질문자

2023. 11. 02. 00:55

volumne은 아래와 같이 설정되어 있습니다.

 

volumes:

- ${AIRFLOW_PROJ_DIR:-.}/airflow_workspace/dags:/opt/airflow/dags

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

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

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

 

 


logs 폴더는 root입니다. root로 바꾸고 권한을 777로 줘서 작동하고 있는데요. 유저로 owner를 변경하기에는 유저 비밀번호를 잊어서 다시 찾아봐야 겠네요 ㅠㅠ

0

박희진님의 프로필 이미지
박희진
질문자

2023. 11. 01. 02:17

혹시나 싶어서 docker-compose.yaml에 정의된 WSL의 logs폴더의 권한을 조사해보았는데요

zz5414 root 이렇게 소유자는 zz5414라는 제 개인 ID이고 그룹은 root길래 소유자를 root로 하위폴더까지 모두 바꾼뒤에 docker-compose down & up을 하였지만 여전히 작동하지 않았습니다

 

worker 컨테이너 내부에 접속하여 logs라는 폴더에서 touch를 하였더니 Permission denied라고 파일이 생성되지 않습니다. sudo su를 하려고 하였지만 컨테이너 내부의 비밀번호를 알 수 없네요...


자포자기 하다가 마지막으로 WSL의 logs폴더를 chmod 777로 모든 권한을 부여하였더니 정상동작하는 것을 확인했습니다. 뭔가 권한에 문제가 있었던 것으로 파악됩니다

 

WSL을 예전에 설치해놓고 비밀번호를 잊어서 강의를 수강하면서 비밀번호를 초기화했는데 root 비밀번호는 알지만 사용자ID의 비밀번호는 모르는 상태가 되어서 계속 su를 입력한 상태로 작업을 진행중이었는데 이 때문에 생긴 문제로 보입니다.

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

2023. 11. 02. 23:29

root 사용자로 접근은 가능한가요?

그럼 root 사용자로 스위치한 다음 아래처럼 유저 패스워드를 변경해보시겠어요?

$ passwd zz5414

패스워드가 잘 변경되면 기본 유저로 돌아와서 logs 디렉토리에 대해 owner 변경해보실래요?

$ sudo chown -R zz5414:zz5414 logs

-R 옵션은 하위에 있는 디렉토리들까지 recursive 하게 모두 적용해주는 옵션인데

sudo 명령시 기본 유저 패스워드 변경한걸로 입력해보세요.

여기까지 되면 에러는 잘 해결될걸로 보입니다. ^^