Airflow의 메타데이터를 관리하는 DB는 기본적으로 sqlite로 설치가 되어 있습니다. 다만 에어플로우는 테스트 환경에서만 sqlite를 사용하고, 실 운영시에는 다른 DB를 사용하기를 권장하고 있습니다.
또한 에어플로우의 Defalut Executor는 Sequential Executor입니다. 이를 Local Executor 등으로 변경하기 위해서는 sqlite 외의 DB를 사용해야만 하기 때문에, 에어플로우를 사용하고자 한다면 sqlite를 변경하는 것이 좋다고 판단됩니다.
따라서 이번 게시물에서는 에어플로우에서 기존 DB인 sqlite를 postgresql로 변경하는 방법에 대해 알아보고자 합니다.
환경
테스트한 환경은 다음과 같습니다.
OS : Ubuntu 18.04
DB : PostgreSQL 11.5
설치
우선 PostgreSQL 패키지 용 키 및 저장소를 추가합니다.
sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
이후 PostgreSQL 설치를 진행합니다.
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
PostgreSQL 접속 후 DB, User를 생성합니다.
sudo -u postgres psql
CREATE DATABASE airflow_db;
CREATE USER airflow WITH PASSWORD 'airflow';
# CREATE USER airflow with password airflow;
\q
를 통해 접속 종료를 합니다. psycopg2 에러가 발생한다면, 에러 참고 를 참고해 해결할 수 있습니다.
이후 에어플로우가 설치된 가상환경으로 이동해 에어플로우 세팅을 진행합니다. 먼저 postgresql 패키지를 설치합니다.
pip install 'apache-airflow[postgres]'
이후 airflow.cfg 파일에서 sql_alchemy_conn
위치의 값을 다음과 같이 변경합니다. 형식은 postgresql+psycopg2://{유저아이디}:{유저패스워드}@localhost/{만든DB명}
입니다.
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost/airflow_db
추가로 sqlite에서 벗어났으므로 병렬화 처리 등을 위해 Executor도 시퀀셜에서 로컬로 변경해주면 좋습니다.
executor = LocalExecutor
airflow db를 초기화합니다.
airflow db check
airflow db init
마지막으로 에어플로우 계정을 생성하여 마무리합니다.
airflow users create --username admin --firstname FIRST_NAME --lastname LAST_NAME --role Admin --email admin@example.org