본문 바로가기

MLOps/트러블 슈팅

[트러블 슈팅] DAG안에 Task들이 병렬 실행을 하지 않는다?(Feat. Airflow Executor)

 

Airflow Executor

개요

아래 그림과 같은 Graph를 가지는 DAG파일을 작성했다.

작성당시에 의도는 "앞에 3개의 Task를 동시에 실행하는 것"이었는데, 나머지 2개가 Queue 상태에 계속 걸려있는 것이다.

뭔가 잘못됐구나 싶었는데, 비밀은 Executor에 있다.


Airflow.cfg 파일을 열어보면 지금 사용 중인 Executor을 확인할 수 있다.

이름만 봐도 알 수 있다.  "순차적으로 실행하는 녀석"

 

옳다구나 하고 뒤에 값을, 바꾸지 마라

"""
executor = KubernetesExecutor
or
executor = LocalExecutor
"""

위에 처럼 바꾸고 airflow를 실행한다면,

"Sqlite는 LocalExecutor를 지원하지 않는다!!"라는 에러문구를 보고 이 글을 마저 다 읽을 것이다.


나는 LocalExecutor를 선택했다.  이유는 제일 빨리 테스트가 가능할 것 같아서 골랐다.

순서는 2단계이다.

  1. postgresql 설치
  2. airflow.cfg 수정

1. Postgresql 설치

sudo apt-get install postgresql

 

2. Postgresql를 설치하면, postgres라는 계정이 추가되는데 해당 계정으로 접속 후, psql 명령어 입력

sudo su - postgres
psql

 

3. 계정 생성(뒤에 ; 꼭 붙일 것..)

create role airflow with login passwrod airflow;

4. 생성된 것을 확인하려면, 

postgres=# \du

5. 생성한 계정에 권한 부여

postgres=# alter role airflow createdb;

6. DB 생성

postgres=# create database airflow;
CREATE DATABASE

# 확인하기
postgres=#\list

7. 권한 부여

postgres=# GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow;
GRANT

8. Airflow.cfg 설정

  • executor 수정
  • sql_alchemy_conn 수정

sql_alchemy_conn 입력 형식은 아래와 같다.

형식은 공식문서에 나와있다.

10. 필요 모듈 설치

(이건 안 되는 경우도 있을 건데, 구글링 하면 찾을 수 있음)

pip install psycopg2-binary

11. DB 초기화

airflow db init

12. 계정 추가

airflow users create --username <> --firstname <> --lastname <> --role Admin --password <> --email <>

결과

는 실행이 아주 잘 된다.

LocalExecutor에서 KubernetesExecutor로 변경해서 환경 구축을 이어가야겠다.