본격적인 프로젝트를 수행하기에 앞서 구체적인 JOB이 설정되지 않았기 때문에 자사 서버에 고객의 운영 환경과 유사하게 설정하고 그에 따른 예상 시나리오를 테스트하며 프로젝트를 준비하려고 한다. 고객사는 현재 Airflow를 통해 AWS의 클라우드 스토리지 서비스인 S3에 데이터를 쌓고 있다. 따라서 자사 서버에 Airflow를 설치하여 환경 구축의 기본을 설정하고자 한다.
Airflow 2.2.5 설치
- OS : Centos 7
- Airflow : 2.2.5 (LocalExecutor)
- MetaDatabase : PostgreSQL13
PostgreSQL13 설치
Airflow의 메타 데이터베이스는 기존 본사 서버(pb6)에 설치되어 있던 PostgreSQL13을 사용하였다. 아래는 설치되어 있지 않을 경우 설치 방법이다.
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql13-server
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13
sudo systemctl status postgresql-13
Airflow가 사용할 Database 및 User 생성
postgres=# CREATE DATABASE airflow;
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
airflow | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | airflow=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=# CREATE USER airflow WITH ENCRYPTED PASSWORD 'airflow';
postgres=# GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow;
Python 가상 환경 생성
기존 python 환경에 영향이 없도록 별도의 가상 환경을 생성하여 사용할 것이다. 모든 설치 및 Airflow 구동은 가상환경 위에서 실행한다.
[root@pb6 airflow]# pip3 install virtualenv
[root@pb6 airflow]# virtualenv airflow
[root@pb6 airflow]# source bin/activate -- 가상환경 활성화
(airflow) [root@pb6 airflow]#
(airflow) [root@pb6 airflow]# deactivate -- 비활성화
Apache Airflow 설치
(airflow) [root@pb6 airflow]# pip3 install apache-airflow
airflow.cfg 설정
executor = LocalExecutor
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow
base_url = http://localhost:8083
web_server_port = 8083
load_examples = False
executor는 기본 SequentialExecutor부터 CeleryExecutor, KubernetesExecutor까지 여러가지 Executor가 있지만 본 설치 과정에선 병렬 처리가 가능한 LocalExecutor로 설치한다. sql_alchemy_conn은 메타스토어로 사용할 데이터베이스를 잡아주면 된다.
sql_alchemy_conn = postgresql+psycopg2://[계정명]:[비밀번호]@localhost:5432/[데이터베이스명]
Airflow Web Server를 띄울 포트를 기재해준다.(기본 8080)
load_examples 는 기본값이 True이지만 Airflow 실행 시 생성되는 예제 dags를 띄우지 않으려면 False로 변경한다. 처음 Airflow를 접한다면 이를 기본값으로 두고 여러가지 dags를 살펴보는 것도 좋은 방법이다.
Airflow 실행
(airflow) [root@pb6 airflow]# airflow db init
(airflow) [root@pb6 airflow]# airflow users create --username admin --password admin --role Admin --email heed159@penta.co.kr --firstname admin --lastname admin
(airflow) [root@pb6 airflow]# airflow webserver -D
(airflow) [root@pb6 airflow]# airflow scheduler -D > /dev/null
Web UI 접근
정상적으로 설치가 완료되었다면 다음과 같은 화면을 볼 수 있다.
트러블슈팅
1) 모듈 에러
DB 초기화를 진행할 때 ModuleNotFoundError: No module named 'psycopg2' 에러가 발생하였고 이는 해당 모듈을 설치해주면 정상적으로 진행된다.
(airflow) [root@pb6 airflow]# pip3 install psycopg2
2) 환경변수 설정
또한 기존 다른 경로에 Airflow를 설치하던 게 있어서 conf 파일 충돌이 발생했다. 이는 AIRFLOW_HOME 환경변수가 설정되지 않아 Airflow가 설치되어 있는 디렉터리를 찾지 못하는 경우인데 /etc/profile에 AIRFLOW_HOME 경로를 설정해주니 충돌나지 않고 제대로 잡혔다. env로 확인할 것.
(airflow) [root@pb6 airflow]# export AIRFLOW_HOME=/data2/airflow
(airflow) [root@pb6 airflow]# source /etc/profile
3) Webserver
만약 Webserver를 정상적으로 올라오지 않거나 scheduler가 올라오지 않는다면 아래의 명령어로 실행한다.
(airflow) [root@pb6 airflow]# nohup airflow webserver >> airflow-webserver.log 2>> airflow-webserver.err &
(airflow) [root@pb6 airflow]# nohup airflow scheduler >> airflow-scheduler.log 2>> airflow-scheduler.err & echo $! > airflow-scheduler.pid
'Snowflake' 카테고리의 다른 글
[Snowflake] 3. Compute Layer (0) | 2023.06.09 |
---|---|
[Snowflake] 2. Storage Layer (1) | 2023.06.09 |
[Snowflake] 1. Snowflake Overview and Architecture (0) | 2023.06.09 |
Snowflake 프로젝트 사전 준비 - 2 (0) | 2023.05.23 |
Snowflake PoC (1) | 2023.05.23 |