💾 Data/Airflow

[Airflow] Airflow DB & DB 변경

heywantodo 2023. 3. 14. 17:47
728x90
반응형

Airflow 데이터베이스

 

1. 에어플로우의 DB

 

 

  • Airflow를 설치하면 Sqlite를 Default DB로 사용하게 되기 때문에 필수 라이브러리
  • Sqlite는 Sequentail Executor로 순차적으로 진행하는 것만 할 수 있음
  • 작업이 느리고 원하는 시간에 작업을 처리하지 못할 수도 있기 때문에 상용 버전에선 거의 사용하지 않음

 

 

  • 다른 Executor를 사용하면 병렬처리가 가능해져 작업이 빨라짐, 다양한 기능 또한 있음
  • 다른 Executor를 사용하기 위해선 DB 변경이 필요함
  • 주로 사용하는 것이 PostgreSQL 이나 MySQL

 

2. Airflow DB 변경 (PostgreSQL)

공식 문서 참조

https://airflow.apache.org/docs/apache-airflow/stable/howto/set-up-database.html

 

Set up a Database Backend — Airflow Documentation

 

airflow.apache.org

 

  • 서버에 PostgreSQL 설치 (Amazonlinux2, CentOS)
sudo yum install postgresql postgresql-server postgresql-devel python3-devel -y
sudo postgresql-setup initdb

sudo systemctl enable postgresql --now
sudo systemctl status postgresql

 

  • PostgreSQL 계정 설정

postgres 유저 비밀번호 변경 & 로그인 후 접속

sudo passwd postgres
su - postgres
psql

airflow database 생성 & 권한 부여 (PostgreSQL 안에서 진행)

--db 생성
CREATE DATABASE airflow_db;

--user 생성 & 권한 부여
CREATE USER airflow_user WITH PASSWORD 'airflow_pass';
GRANT ALL PRIVILEGES ON DATABASE airflow_db TO airflow_user;
ALTER USER airflow_user SET search_path = public;

--db 확인
\l

 

  • Airflow DB 설정 변경 
pip install psycopg2
vi /home/ec2-user/airflow/airflow.cfg

sql_alchemy_conn & result_backend를 PostgreSQL로 변경 

sql_alchemy_conn = postgresql+psycopg2://airflow_user:airflow_pass@localhost/airflow_db
result_backend = db+postgresql://airflow_user:airflow_pass@localhost/airflow_db

 

  • Airflow DB 초기화 후 재실행
 airflow db init
 airflow webserver
 airflow scheduler

 

  • DB 확인 (PostgreSQL 안에서 진행)
\c airflow_db
\dt

 

3. Airflow DB 변경 (MySQL)

 

  • 서버에 MySQL 설치 & 확인 (MySQL 8)
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm -y

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install mysql-community-server

mysql -V
sudo systemctl enable mysqld --now
sudo systemctl status mysqld

Ubuntu(22.04)

sudo apt-get update -y
sudo apt-get install mysql-server -y
sudo systemctl enable mysql --now
sudo systemctl status mysql

 

  • MySQL 접속

root 초기 패스워드 확인

sudo grep 'temporary password' /var/log/mysqld.log

mysql 로그인 & root 유저 비밀번호 변경

mysql -u root -p
alter user 'root'@'localhost' identified by 'Heywant517!';

 

  • MySQL DB 생성
CREATE DATABASE airflow_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'airflow_user' IDENTIFIED BY 'Airflow_pass123!';
GRANT ALL PRIVILEGES ON airflow_db.* TO 'airflow_user';

 

  • Airflow 설정 파일 변경
vi /home/ec2-user/airflow/airflow.cfg

sql_alchemy_conn를 MySQL로 변경 

sql_alchemy_conn = mysql+mysqldb://airflow_user:Airflow_pass123%@localhost:3306/airflow_db

 

  • Airflow DB 초기화

MySQL 클라이언트 라이브러리 설치

sudo yum install python3-devel gcc mysql-devel -y
pip install mysqlclient

ubuntu

sudo apt-get install python3-dev gcc libmysqlclient-dev -y
pip install mysqlclient

 

DB 재시작 & DB 초기화 

sudo systemctl restart mysqld
airflow db init

 

  • DB 확인 (mysql 안에서 확인) 
mysql -u airflow_user -pAirflow_pass123!
use airflow_db;
show tables;
728x90
반응형