기본으로 SQLite 가 되어있고 사용을 많이 하지 않는다면 굳이 바꿀 필요가 없는데, 왜 PostgreSQL로 바꾸려고 하는지 궁금해할 수 있다.
SQLite → PostgreSQL 로 변경하려고 하는 이유는 바로 SequentialExecutor
가 아닌 다른 Executor
를 사용하기 위해서다. 기본적으로 Airflow는 병렬 처리를 제공하지 않는 SequentialExcutor 를 사용한다. SequentialExcutor를 사용하면 DAG에서 같은 시간으로 스케줄러를 실행해 놓아도 병렬적으로 실행되지 않고 하나가 끝나면 다른 하나가 시작되는, 즉 순차적으로 DAG가 실행된다.
연결된 DB가 SQLite라면 SequentialExcutor를 다른 Executor로 변경할 수 없다. 병렬적으로 처리할 수 있는 Executor를 사용하기 위해서는 다른 DB가 필요하기 때문에 SQLite → PostgreSQL 로 변경하려고 한다.
[webserver에 접속하면 SequentialExecutor 사용하지 말라는 문구도 발생함]
CREATE DATABASE {DB이름};
# example
CREATE DATABASE airflow_db;
CREATE USER {id} with password '{패스워드}';
# example
CREATE USER airflow_user with password 'airflow_password';
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.cfg 파일에서 postgresql로 연결한 후 아래 명령어를 통해 데이터베이스 스키마를 생성한다.
$ airflow db init
psql 명령어를 통해 생성했던 DB에 생성한 USER로 접속해본다.
접속했다면 \dt
명령어를 통해 생성된 테이블을 확인한다.
$ psql -U airflow_user -d airflow_db
airflow_db => \dt
Airflow 계정을 생성하지 않으면 Web UI 접속할 수 없기 때문에 계정을 생성해보자.
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
$ 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 users delete -u {username}
[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;
airflow.cfg
파일에서 아래와 같이 수정한다.
# 수정 전
executor = SequentialExecutor
# 수정 후
# executor = SequentialExecutor
executor = LocalExecutor
이와 같이 수정한 후에 Webserver로 다시 들어가보면 위험 문구가 없어져있다.
[수정 전]
[수정 후]