다시 이음

(trouble shooting)docker에서 airflow실행 오류?! 본문

채우기/Airflow

(trouble shooting)docker에서 airflow실행 오류?!

Taeho(Damon) 2023. 3. 15. 17:20

 

 

udemy강의를 통해서 airflow를 docker를 사용해서 진행을 하는데 실행 시에 localhost:8080 을 통해서 airflow UI를 확인할 수 있습니다.

 

그런데 DAG를 생성하고 실행하였을 때 계속해서 running 상태이거나 업데이트가 제대로 진행되지 않는 상태라면?

 

docker-compose ps 명령어를 실시하여 현재 어떤 상태인지 확인해볼 필요가 있습니다.

 


 

1. State가 unhealthy 인 경우

unhelathy 사례

이 경우에는 webserver 노드가 unhealthy 상태라면 localhost에 접속이 불가한 상태입니다.

 

이렇게 unhealthy인 경우에는 일단 실행한지 별로 되지 않았다면 1분 정도 기다린 후 다시 한번 확인해보거나 docker-compose down --volumes --remove-orphans 명령어를 실행하여 삭제를 하고 다시 실행하는 방법이 있습니다.

 

 

 

 

2. health : starting 상태가 계속 지속되는 경우

이 경우는 airflow에 접속이 가능하지만 DAG가 실행되지 않는 것을 확인할 수 있습니다.

 

한참을 찾아본 결과 

[2021-06-13 18:16:39,693: ERROR/MainProcess] Process 'ForkPoolWorker-15' pid:23092 exited with 'signal 6 (SIGABRT)'
...
[2021-06-13 18:16:39,719: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 6 (SIGABRT).',)
Traceback (most recent call last):
  File "~/python3.6/site-packages/billiard/pool.py", line 1267, in mark_as_worker_lost
    human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: signal 6 (SIGABRT).

worker 노드의 log를 확인하였을 때 위와 같은 WorkerLostError가 생성된다하면 꼭 RAM 사용량을 확인해봐야합니다.

 

일반적으로 airflow Executor는 Celery Executor, Sequential Executor, Local Executor로 이루어져있습니다.

기본적으로 병렬 수행이 가능한 Celery Executor를 기본적으로 많이 사용하는데 생각보다 RAM사용량이 많은 것 같습니다.

 

Local Executor로 변경해서 실행해보면 Airflow가 정상적으로 실행되는 것을 확인할 수 있었고 DAG 또한 정상 작동합니다.

 

그래서 간단한 공부용으로는 Local Executor를 사용해서 진행을 하시거나 Celery Executor를 사용하기 위해 RAM을 최적화 해주시면 정상 작동 할 것입니다.

 

 

 

 

 

 

 

'채우기 > Airflow' 카테고리의 다른 글

The Complete Hands-On Introduction to Apache Airflow  (0) 2023.03.10