본 포스팅은 Apache Airflow 설치 방법과 Airflow란 무엇인지 정리한 포스팅입니다.
💡 Apache Airflow ?
Airflow란 AirBnb에서 만든 workflow 관리 툴입니다. workflow는 일련의 작업의 흐름이며, 예를 들어서 ETL 같은 경우는 데이터를 추출 -> 변환 -> 적재하는 workflow를 관리해주는 툴이 Airflow입니다.
airflow 구조
- Scheduler - Airflow의 DAG와 작업들을 모니터링하고 실행 순서와 상태 관리
- Workers - Airflow의 작업을 실행하는 공간
- Metadata Database - Airflow에서 실행할 작업에 관한 정보들을 저장
- Webserver - Airflow의 user interface 제공
- DAG directory - Airflow에서 실행할 작업들을 파이프라인 형태로 저장
즉, Airflow는 Scheduler가 DAG directory의 작업을 가져와서 Workers에서 실행하는 형태라고 할 수 있습니다.
💡 DAG ?
DAG는 비순환 그래프로써 순환하는 싸이클이 없는 그래프입니다. 즉, 노드와 노드가 단방향으로 연결되어 있어 그 노드로 향하게 되면 돌아오지 않는 특성을 가지고 있습니다. Airflow에서는 Task의 연결관계를 DAG로 관리하고, Webserver를 통해서도 DAG 구조를 시각적으로 확인할 수 있다.
OS : ec2(Ubuntu 20.24)
공식 문서 가이들 따라 했으며 더 자세한 것은 공식문서를 참고해주시면 될 것 같습니다.
1. Dependencies 설치
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends \
freetds-bin \
krb5-user \
ldap-utils \
libsasl2-2 \
libsasl2-modules \
libssl1.1 \
locales \
lsb-release \
sasl2-bin \
sqlite3 \
unixodbc \
postgresql \
python3-pip \
python3-testresources
2. 환경 변수 설정
- Airflow를 설치하기 앞서 먼저 경로와 환경 변수 설정을 세팅해야 됩니다. Airflow 공식 문서에 나와 있듯이 Airflow는 기본 경로를 '~/airflow'로 설정하는 것을 권장합니다. 즉, 사용자 계정인 경로를 선호하고 있습니다.
- Airflow 버전을 어떤 것으로 설치할 것이고, Python 버전은 무엇인지 등을 세팅하고 Airflow를 설치합니다.
export AIRFLOW_HOME=~/airflow
export AIRFLOW_VERSION="2.1.2"
export PYTHON_VERSION="$(python3 --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
export CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
export PATH=$PATH:/home/ubuntu/.local/bin
3. Airflow 설치
- 환경 세팅이 끝나면 Airflow 설치를 진행합니다.
- Airflow 설치된 경로 : /Users/user_name/airflow
- Python 버전 : Python3.8
- Airflow 버전 : 2.1.2
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
4. DB 초기화
- DB를 초기화시키면 airflow 디렉터리가 생기고 그 안에 초기화되어 Airflow 실행에 필요한 파일이 생성됩니다.
- airflow.cfg : airflow의 환경설정 파일
- airflow.db : SQLite DB 파일
- logs : airflow의 각종 로그를 관리
- webserver_config.py : 웹서버 설정을 위한 config 파일
airflow db init
5. 사용자 생성
- airflow를 관리할 사용자 계정을 하나 만들어줍니다.
airflow users create \
--username admin \
--firstname admin \
--lastname admin \
--role Admin \
--email admin@naver.com
6. Airflow web server 실행
- airflow webserver를 실행시켜서 web ui를 확인할 수 있습니다.
# web 서버 시작
airflow webserver --port 8080
# 스케쥴러 시작
airflow scheduler
- http://localhost으로 접속이 가능하지만 현재 ec2 ubuntu를 사용했으므로, ec2의 hostname:8080으로 접속해서 확인해야 됩니다.
- 접속이 안되시면 ec2 보안 그룹에 22,8080 포트를 열어두어야 합니다.
아까 생성한 airflow계정으로 접속하시면 airflow web ui를 확인할 수 있습니다. Dags 아래에 airflow example dags들이 존재하는데 보기 불편함으로 example을 보이지 않도록 하려면 약간의 설정이 필요합니다.
- airflow.cfg 파일을 열어서 load_examples를 False로 설정
# load_examples = False로 설정
vi airflow.cfg
- airflow db를 삭제하고 다시 airflow db init 명령어로 db를 초기화해줍니다.
#airflow.db를 삭제
rm -rf airflow.db
#db다시 초기화
airflow db init
- db를 초기화했으므로 사용자도 다시 만들어 줍니다.
airflow users create \
--username admin \
--firstname admin \
--lastname admin \
--role Admin \
--email admin@naver.com
- airflow web server를 켜보면 example이 없어진 것을 확인할 수 있습니다.