본문 바로가기
공부 및 정리/데이터 엔지니어링

[Airflow] 개요 및 설치 방법

by 스파이펭귄 2024. 3. 4.
728x90

Airflow는 복잡한 워크 플로우와 데이터 처리 파이프라인을 구성 및 스케쥴링하고 모니터링하는데 특화된 오픈소스 Orchestration 플랫폼으로 Python으로 작성되어있다.

Orchestration이란?

PostgreSQL의 데이터를 불러와 Spark에서 작업한다던지, HDFS에 올린다던지 하는 솔루션과 솔루션과의 연계와 데이터 통신을 제어하는 것을 Orchestration이다.

Airflow는 이러한 제어를 확장성있게 제공하기에 매우 큰 인기를 얻고 있는 중이다.

Airflow란

워크플로우란 업무의 단계를 의미한다. 예를 들어 아래와 같은 업무가 있다고 하자.

  1. API를 사용해 데이터를 받아 전처리를 한다.
  2. 기존 DB의 데이터를 삭제한다.
  3. 전처리한 데이터를 DB에 삽입한다.

이때 워크플로우는 DAG(Directed Acyclic Graph)라 부르며, 이름 그대로 싸이클이 없는 그래프로 되어있다. 또한 DAG 안에는 1개 이상의 Task라 부르는 업무들이 존재하며 이를 단계적으로 수행하게 되며 acyclic한 특징 때문에 시작과 끝이 명확하다.

이러한 특징 때문에 Airflow의 워크플로우를 구성시에는 반드시 “작업의 순서”가 보장되어야만한다는 조건이 있다. 예를 들어 DB에 저장된 데이터를 처리하기 위해서는 DB에 해당 데이터가 먼저 저장되어있어야 한다는 것이다. 또한 조건은 순환 의존 문제가 발생을 허락하지 않아 task들의 순서와 의존성 구성 시 주의해야 한다.

또한 Airflow는 모니터링과 실패시 관리가 간편하다는 장점을 가진다. 위와 같이 웹 인터페이스를 제공하여 직관적이고 쉽게 워크 플로 작업들에 대한 관리를 수행할 수 있다.

또한 Python을 통해 작업을 하기 때문에 객체 지향 개발을 할 수 있으며 이를 통하여 반복적으로 사용되는 기능을 재사용하여 빠르게 워크 플로우를 작성할 수 있다.

 

Airflow 설치

웬만하면 docker를 이용해서 설치하는게 좋다. python에서 pip install을 사용해서 설치 시에는 간단하지만, 저 사양의 아키텍쳐가 설치되어 여러가지 제약이 존재하게 되기 때문이다. (한번에 하나의 task 만을 실행한다던가…)

도커 설치

GCP 환경에서 docker를 통해 설치를 진행하였다. GCP는 처음 이용시 3개월간 쓸 수 있는 300$의 크레딧을 무료로 제공하니 꼭 해보자! (아래 블로그 참조)

[GCP] VM Instance 생성하기

Install Docker Engine on Ubuntu

위 링크는 도커를 우분투에 설치하는 방법이 자세히 나와있다. 아래 내용이 안된다면 공식 홈페이지에 가서 따라하는 것을 추천한다.

아래 명령어를 한 줄씩 따라 치면서 통해서 docker를 위한 apt 설정한다.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

그 후 아래 명령어를 통해 docker를 설치한다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

설치를 완료했다면 아래 명령어를 통해 docker를 실행후 띄워진 컨테이너들을 확인해보자.

sudo service docker start
docker ps

아무것도 안했기 때문에 당연하게도 아무것도 안뜬다. (작동 안하는 경우 sudo를 붙여보자)

이번에는 간단한 컨테이너를 띄워보자.

sudo docker run hello-world

이미지가 없기 때문에 다운을 받고 그 이미지를 컨테이너로 띄우게 된다.

다시 아래 명령어를 보면 컨테이너를 볼 수 있다.

docker ps -a

이제 이 컨테이너와는 볼장 다 봤기에 삭제해주자. 위 명령어에서 나오는 container ID를 통해 제거하자.

docker rm Container ID

Docker Compose 설치

Docker Compose는 여러 컨테이너를 다룰 때 컨테이너에 대한 설정을 하나의 YAML 파일로 다룰 수 있게 해주는 녀석이다.

아래 명령어는 아까 도커를 설치한 명령어인데 마지막 부분을 보면 docker compose plugin까지 설치하는 것을 확인할 수 있다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin **docker-compose-plugin**

Airflow 설치

이제 드디어 Airflow를 설치해보도록 하자.

Running Airflow in Docker — Airflow Documentation

Airflow 공식 홈페이지를 참조하면 간단히 설치할 수 있다. 들어가서 아래 yaml 파일 받는 명령어를 찾자.

아까 받은 docker-compose를 사용할 때가 왔다. 아래 명령어를 통해 yaml 파일을 받도록 하자.

mkdir airflow-docker
cd airflow-docker
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.8.2/docker-compose.yaml'

이후 아래 명령어를 통해 필요한 디렉토리와 환경 파일을 만들어주자.

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

이제 준비는 끝났다. 아래 명령어를 통해 airflow를 도커에 설치해보자.

docker compose up airflow-init

처음 띄우는 과정이기 때문에 필요한 이미지들을 다운받게 된다. 다운이 완료되었다면 아래 명령어를 통해 Airflow 서비스를 실행해보자.

docker compose up

이때 docker-compose.yaml 파일이 있는 위치에서 해줘야 한다는 점 잊지 말자.

이후 새롭게 ssh 연결을 하나 더 해서 아래 명령어를 통해 현재 docker에 띄워진 컨테이너 리스트를 확인해보자.

docker ps

redis, postgre, airflow 여러가지 컨테이너가 한번에 띄워진 것을 확인할 수 있다.

이제 Airflow의 자랑인 UI에 접속해보자. 만약 GCP와 같은 클라우드 서비스를 이용중이라면 8080 포트를 열어주어야 한다. (local에서 하고있다면 localhost:8080으로 바로 접속하면 된다.)

아래는 GCP에서 8080을 여는 과정이다.

위 인스턴스 목록창에서 빨간색 박스로 쳐진 방화벽 규칙 설정에 들어간다.

빨간색 박스로 쳐진 방화벽 규칙 만들기에 들어간다.

다 필요 없고 빨간 박스 쳐진 부분만 잘 수정하여 만들어주자.

이후 해당 인스턴스의 외부 IP:8080으로 들어가면 Airflow UI를 볼 수 있다!!

초기 아이디와 비밀번호 둘 다 airflow이므로 입력 후 입장하면 된다.

드디어 성공!!~~~~

 

Airflow의 주의 사항들

  • airflow는 dag 폴더를 기본적으로 5분 주기로 파싱을 하기 때문에 새로 만들 dag가 바로 localhost:8080에 반영되지 않을 수 있다. 컨테이너를 내렸다가 다시 띄우던가 해보는 편이 빠르다.
  • Airflow는 솔루션과 솔루션이라는 큰 단위에서 제어를 하기 때문에 오래 걸리는 작업들을 다루게 된다. 그렇기 때문에 1분 미만의 짧은 주기의 작업에는 최적화 되어있지 않아 이러한 작업들은 Kafka나 Spark 등의 스트리밍 데이터 처리 플랫폼을 사용하는 편이 좋다.

 

Reference

728x90