기본적으로 설치하는 과정은 다음과 같습니다. 복잡해보이지만, 이렇게 했을 때 오류가 발생하지 않고 잘 설치됩니다!
같은 방식으로 EC2에도 똑같이 적용됩니다!
에어플로우 파이썬 모듈 설치
먼저 우분투의 소프트웨어 관리 툴인 apt-get을 업데이트 하고 파이썬 3.0 pip를 설치합니다.
원래는 apt-get update 이후에 python3-pip을 설치하면 되는데 pyopenssl 관련 충돌이 있어서 이를 먼저 해결하고 python3-pip를 설치하시면 됩니다.
sudo apt-get update
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
sudo pip3 install pyopenssl --upgrade
sudo apt-get install -y python3-pip
다음으로 Airflow 2.0을 설치하고 필요 기타 모듈을 설치합니다.
sudo apt-get install -y libmysqlclient-dev
sudo pip3 install --ignore-installed "apache-airflow[celery,amazon,mysql,postgres]==2.5.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.5.1/constraints-3.7.txt"
sudo pip3 install oauth2client
sudo pip3 install gspread
sudo pip3 install numpy
sudo pip3 install pandas
# sudo pip3 install cryptography psycopg2-binary
Airflow의 정보가 저장될 데이터베이스로 사용될 Postgres 설치
Airflow는 기본으로 SQLite 데이터베이스를 설치하는데 이는 싱글 쓰레드라 다수의 DAG 혹은 다수의 Task들이 동시에 실행되는 것을 지원하지 못합니다. 나중을 위해 postgres를 먼저 설치합니다.
Postgres 설치
sudo apt-get install -y postgresql postgresql-contrib
다음으로 Airflow가 Postgres를 접속할 때 사용할 계정을 Postgres위에서 생성
이를 위해서 postgres 사용자로 재로그인을 하고 postgres shell (psql)을 실행한 다음에 airflow라는 이름의 계정을 생성합니다. 마지막에 exit를 실행해서 원래 ubuntu 계정으로 돌아갑니다.
이 과정은 postgres의 dags의 내역을 저장할 데이터베이스를 생성하고 있는 과정입니다.
$ sudo su postgres
$ psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.
postgres=# CREATE USER airflow PASSWORD 'airflow';
CREATE ROLE
postgres=# CREATE DATABASE airflow;
CREATE DATABASE
postgres=# \q
$ exit
Postgres를 재시작
이 명령어는 ubuntu 계정에서만 실행이 가능합니다.
sudo service postgresql restart
에어플로우 계정 생성
저희가 설치할 airflow 서비스는 ubuntu 사용자가 아닌 airflow 사용자를 기반으로 실행될 예정입니다.
이를 위해서 airflow 계정을 생성하며 airflow 계정의 홈디렉토리는 /var/lib/airflow로 설정합니다.
자세히는 airflow라는 그룹을 만들고, 해당 그룹에 airflow라는 유저를 추가합니다. 그리고 해당 유저의 홈 디렉토리를 /var/lib/airflow로 설정합니다.
sudo groupadd airflow
sudo useradd -s /bin/bash airflow -g airflow -d /var/lib/airflow -m
Airflow 첫 번째 초기화
앞서 설치된 Airflow를 실행하여 기본환경을 만듭니다.
이 때 SQLite가 기본 데이터베이스로 설정되며 이를 뒤에서 앞서 설치한 Postgres로 꼭 변경해주셔야합니다.
sudo su airflow
$ cd ~/
$ mkdir dags
$ AIRFLOW_HOME=/var/lib/airflow airflow db init
$ ls /var/lib/airflow
airflow.cfg airflow.db dags logs unittests.cfg
db.init을 실행하게 되면 위에 처럼 여러 파일이 생기는데 이 중 airflow.cfg는 airflow의 환경설정과 관련 있는 파일입니다.
Airflow 환경 파일(/var/lib/airflow/airflow.cfg)을 편집하여 다음 4가지를 바꿉니다
- vi 명령어를 활용합니다.
- "executor"를 SequentialExecutor에서 LocalExecutor로 수정한다
- 여기서 SequentialExecutor는 airflow가 설치 될 때 기본으로 설치 되는 sqlite이라는 데이터베이스를 사용할 때 쓰는 Executor입니다. 저희는 postgres를 설치해서, db로 사용할 것이기 때문에 이를 Local로 변경해줍니다.
- Executor는 기본적으로 워커들을 실행해주는 역할을 합니다.
- 특히 LocalExecutor를 사용하는 경우에는 airflow가 싱글 노드에 설치 되어있고, 그 때 설치된 메타데이터 데이터베이스가 mysql 혹은 postgresql처럼 멀티쓰레드 환경을 지원해주는 DB일 때 사용합니다.
- 이 싱글노드가 멀티노드가 되면 CeleryExecutor를 사용합니다.
- 만약 다수의 서버를 쓰는데, 그게 전용서버가 아닌 kubernetics 클러스터라면 KubernetesExecutor를 사용합니다.
- DB 연결스트링("sql_alchemy_conn")을 앞서 설치한 Postgres로 바꾼다
- 이 경우 ID와 PW와 데이터베이스 이름이 모두 airflow를 사용하고 호스트 이름은 localhost를 사용한다
- "load_examples" 설정을 False로 바꾼다
- 이걸 False로 하는 이유는 설치할 때, examples들이 따라오면 굉장히 복잡한데, 예제를 가져오지 않기 위해서 False.
[core]
...
executor = LocalExecutor
...
sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow
...
load_examples = False
Airflow를 재설정
airflow 사용자로 아래 명령을 수행해야 합니다. 설정이 바뀌었기 때문에 다시 init 해줍니다.
AIRFLOW_HOME=/var/lib/airflow airflow db init
여기까지가 airflow 설정이 끝났다고 보시면 됩니다!
Airflow 웹서버와 스케줄러 실행
Airflow 웹서버와 스케줄러를 백그라운드 서비스로 사용하려면 다음 명령을 따라하여 두 개를 서비스로 등록합니다. 다음 명령들은 ubuntu 계정에서 실행되어야합니다. 만일 "[sudo] password for airflow: " 메시지가 나온다면 지금 airflow 계정을 사용하고 있다는 것으로 이 경우 "exit" 명령을 실행해서 본 계정으로 돌아오세요!!
ubunut 계정(본 계정)으로 아래를 수행
웹서버와 스케줄러를 각기 서비스로 등록
sudo vi /etc/systemd/system/airflow-webserver.service
[Unit]
Description=Airflow webserver
After=network.target
[Service]
Environment=AIRFLOW_HOME=/var/lib/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow webserver -p 8080
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
sudo vi /etc/systemd/system/airflow-scheduler.service
[Unit]
Description=Airflow scheduler
After=network.target
[Service]
Environment=AIRFLOW_HOME=/var/lib/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/usr/local/bin/airflow scheduler
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
다음 명령을 실행하여 앞서 서비스들을 활성화 시킵니다
sudo systemctl daemon-reload
sudo systemctl enable airflow-webserver
sudo systemctl enable airflow-scheduler
서비스를 시작합니다.
sudo systemctl start airflow-webserver
sudo systemctl start airflow-scheduler
서비스들의 상태가 보고 싶다면 다음 명령을 수행합니다.
sudo systemctl status airflow-webserver
sudo systemctl status airflow-scheduler
특히 서비스 시작의 경우에는, 서버가 재부팅 되어서, 서비스가 종료 되었을 때, 다시 명령어를 입력하시면 됩니다.
끝으로 Airflow webserver에 로그인 어카운트를 생성합니다.
이는 airflow계정에서 실행되어야합니다. password의 값을 적당히 다른 값으로 바꿔줍니다.
sudo su airflow
AIRFLOW_HOME=/var/lib/airflow airflow users create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin4321
만약 실수로 ubuntu 어카운트에서 실행했다면 admin 계정을 먼저 지웁니다. 지울 때 아래 명령을 사용합니다.
AIRFLOW_HOME=/var/lib/airflow airflow users delete --username admin
이 화면을 보시면 잘 설정하신 겁니다. 앞서 만든 계정명과 비밀번호를 활용해서 로그인 하시면,
DAGS를 보실 수 있습니다.
추가) BASH 파일 편집
airflow 사용자로 로그인시 (sudo su airflow등) AIRFLOW_HOME 환경변수가 자동설정되게 합니다.
vi ~/.bashrc
이 파일의 마지막에 3개의 라인을 추가합니다.
AIRFLOW_HOME=/var/lib/airflow
export AIRFLOW_HOME
cd ~/
exit을 실행하여 ubuntu 사용자로 나온 다음에 다시 airflow 사용자로 로그인하면 (sudo su airflow) 자동으로 홈디렉토리로 이동하고 AIRFLOW_HOME 환경변수가 설정되어 있음을 확인할 수 있습니다.
ubuntu@ip-172-31-54-137:~$ sudo su airflow
airflow@ip-172-31-54-137:~/$ pwd
/var/lib/airflow
airflow@ip-172-31-54-137:~/$ echo $AIRFLOW_HOME
/var/lib/airflow
'데이터 엔지니어링 > 실리콘밸리에서 날아온 데이터엔지니어링 스타터 키트' 카테고리의 다른 글
[4주차] AIRFLOW FULL REPRESH 예제(+ Incremental Update 맛보기) (0) | 2023.05.06 |
---|---|
[4주차] AIRFLOW 활용 데이터 적재(FULL REPRESH) (0) | 2023.05.06 |
[4주차] 트랜잭션 (0) | 2023.04.16 |
[3주차] AIRFLOW (0) | 2023.04.08 |
[3주차] ETL/데이터파이프라인 (0) | 2023.04.08 |