포스트

Airflow 설치하기

개요

서버 개발을 하다보면 Batch 작업을 언젠가 무조건 하게 된다. 이때 수많은 아래와 같은 수 많은 선택지를 마주하게 된다.

1️⃣ Spring Batch

사용 사례

엔터프라이즈 수준의 배치 처리

특징

트랜잭션 관리, 재시도 및 오류 처리, 청크 기반 처리, 다양한 데이터 소스와의 통합, 스케줄링 기능

2️⃣ Apache Spark

사용 사례

대규모 데이터 처리 (배치 및 스트리밍)

특징

인메모리 데이터 처리, 내결함성, 하둡 생태계 통합, 머신러닝 라이브러리(MLlib), 스트리밍, 그래프 처리.

3️⃣ AWS Step Functions + AWS Batch

사용 사례

클라우드 기반 배치 처리 및 오케스트레이션

특징

서버리스 실행, 확장성, 모니터링, 기타 AWS 서비스와의 통합

올바른 일처리를 위해 올바른 도구를 선택하는건 매우 중요한 일이다. 하지만 실무에서 금전적 비용, 시간적 비용 등 여러 문제들을 고려해야 한다. 그래서 나는 Airflow를 통해 배치를 작업하기로 결정했다. 현재 회사에서 Airflow가 구축되어 있는 형태며 추가적으로 서버를 개설하는건 비용적인 측면에서 낭비이기 때문이다.

Airflow 설치하는 방법

Python 설치

1
brew install python@3.8
1
echo 'export PATH="/opt/homebrew/opt/python@3.8/bin:$PATH"' >> ~/.zshrc

MySQL 설치

1
brew install mysql
1
brew install mysql-client

Anaconda 설치

아나콘다 사이트를 통해 설치 후 아래 command를 실행한다.

1
conda init
1
source ~/.zshrc

Airflow 설치

airflow_env 이름으로 conda 환경을 생성 후 활성화한다.

1
conda create -n airflow_env python=3.8
1
conda activate airflow_env

Airflow Quick Start에 가이드를 따라 아래 command들을 실행한다.

1
export AIRFLOW_HOME=~/airflow

Airflow 버전과 Python 버전에 따른 URL을 설정해 준다.

1
AIRFLOW_VERSION=2.10.2
1
PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
1
CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"

Airflow 설치를 진행한다.

1
pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

Airflow 데이터베이스를 초기화 하고 유저를 생성한다.

1
airflow db migrate
1
2
3
4
5
6
airflow users create \
    --username admin \
    --firstname Geomseong \
    --lastname Ahn \
    --role Admin \
    --email gs97ahn@naver.com

Airflow에 필요한 패키지 설치

Airflow와 Airflow 웹 서버에 필요한 Flask-Admin 및 Wekzeung 패키지를 설치한다.

1
pip install apache-airflow flask-admin werkzeug

(옵션) Airflow에서 MySQL에 작업을 저장하고 쿼리를 실행할 수 있도록 관련 패키지를 설치한다.

1
pip install apache-airflow-providers-mysql

에러가 난다면 아래 command를 실행한다.

1
brew install pkg-config
1
export MYSQLCLIENT_LDFLAGS=$(pkg-config --libs mysqlclient)
1
export MYSQLCLIENT_CFLAGS=$(pkg-config --cflags mysqlclient)

(옵션) Airflow에서 AWS의 다양한 서비스와 상호 작용할 수 있는 provider를 설치한다.

1
pip install apache-airflow-providers-amazon

airflow.cfg 파일을 load_example = Trueload_example = False로 바꿔준다.

Airflow 실행

Airflow 웹서버 및 스케줄러를 실행한다.

1
airflow webserver --port 8080
1
airflow scheduler
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.