Airflow DB 변경, SQLite to PostgreSQL

최더디·2021년 12월 13일
0

Airflow

목록 보기
2/2
post-thumbnail

📌 서론

📍왜 PostgreSQL로 변경하려고 하는가?

기본으로 SQLite 가 되어있고 사용을 많이 하지 않는다면 굳이 바꿀 필요가 없는데, 왜 PostgreSQL로 바꾸려고 하는지 궁금해할 수 있다.

SQLite → PostgreSQL 로 변경하려고 하는 이유는 바로 SequentialExecutor 가 아닌 다른 Executor 를 사용하기 위해서다. 기본적으로 Airflow는 병렬 처리를 제공하지 않는 SequentialExcutor 를 사용한다. SequentialExcutor를 사용하면 DAG에서 같은 시간으로 스케줄러를 실행해 놓아도 병렬적으로 실행되지 않고 하나가 끝나면 다른 하나가 시작되는, 즉 순차적으로 DAG가 실행된다.

연결된 DB가 SQLite라면 SequentialExcutor를 다른 Executor로 변경할 수 없다. 병렬적으로 처리할 수 있는 Executor를 사용하기 위해서는 다른 DB가 필요하기 때문에 SQLite → PostgreSQL 로 변경하려고 한다.

[webserver에 접속하면 SequentialExecutor 사용하지 말라는 문구도 발생함]

📌 PostgreSQL DB 생성 및 DB 유저 생성

📍 DB 생성

CREATE DATABASE {DB이름};

# example
CREATE DATABASE airflow_db;

📍User 생성

CREATE USER {id} with password '{패스워드}';

# example
CREATE USER airflow_user with password 'airflow_password';

📌 airflow.cfg 파일 수정

airflow.cfg 파일을 보면 기본으로 sqlite 를 사용하고 있는데, 해당 부분을 수정한다.

# 수정 전
sql_alchemy_conn = sqlite:////~/airflow/airflow.db

# 수정 후
# sql_alchemy_conn = sqlite:////~/airflow/airflow.db
sql_alchemy_conn = postgresql+psycopg2://airflow_user:airflow_password@localhost/airflow_db

📌 Airflow DB 초기화

📍DB 초기화

데이터베이스를 생성 및 세팅하고, airflow.cfg 파일에서 postgresql로 연결한 후 아래 명령어를 통해 데이터베이스 스키마를 생성한다.

$ airflow db init

📍초기화 되었는지 확인하기

psql 명령어를 통해 생성했던 DB에 생성한 USER로 접속해본다.
접속했다면 \dt 명령어를 통해 생성된 테이블을 확인한다.

$ psql -U airflow_user -d airflow_db

airflow_db => \dt

📌 Airflow User 계정 생성

Airflow 계정을 생성하지 않으면 Web UI 접속할 수 없기 때문에 계정을 생성해보자.

📍Admin 계정 생성

username, firstname, lastname, role, password, email 중 하나라도 값이 없다면 오류가 발생한다.

$ airflow users create \ 
> --username test_admin_user \
> --firstname harry \ 
> --lastname potter \
> --role Admin \
> --password 1234 \
> --email harry@naver.com
# 한줄 명령어
$ airflow users create --username test_admin_user --firstname harry --lastname potter --role Admin --password 1234 --email harry@naver.com

📍 User 계정 생성

$ airflow users create \ 
> --username test_role_user \
> --firstname hermione \ 
> --lastname granger \
> --role User \
> --password test_password \
> --email hermione@naver.com
# 한줄 명령어
$ airflow users create --username test_role_user --firstname hermione --lastname granger --role User --password test_password --email hermione@naver.com

📍 Airflow User 삭제

$ airflow users delete -u {username}

📍 DB로 계정 목록 확인하기

[webserver에 접속해 확인하는 방법]

계정을 생성 했다면 http://localhost:8080/ 해당 링크로 이동해 로그인을 해본다.

[PostgreSQL에 접속해 확인하는 방법]

계정이 생성되면 이전에 연결해놓았던 PostgreSQL에 모두 저장된다. 한번 확인해보자.

# airflow_user로 airflow_db DB 연결하기
$ psql -U airflow_user -d airflow_db

# \dt 명령어로 ab_user 테이블 존재하는지 확인하기
airflow_db => \dt

테이블이 존재한다면 SQL로 USER 조회를 해보면 생성한 계정들 정보가 나온다.

airflow_db => SELECT * FROM ab_user;

📌 Executor 수정

airflow.cfg 파일에서 아래와 같이 수정한다.

# 수정 전
executor = SequentialExecutor

# 수정 후
# executor = SequentialExecutor
executor = LocalExecutor

이와 같이 수정한 후에 Webserver로 다시 들어가보면 위험 문구가 없어져있다.

[수정 전]

[수정 후]

profile
focus on why

0개의 댓글