포스트

Airflow 설치하기

Spring Batch, Spark, AWS Batch 등 배치 처리 선택지를 비교한 뒤, macOS에서 Conda 가상환경으로 Apache Airflow 2.10을 설치하고 MySQL, AWS provider까지 세팅해 실행하는 절차를 정리합니다.

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 = True를 load_example = False로 바꿔준다.

Airflow 실행

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

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