Apache Airflow 기반의 데이터 파이프라인 - Chapter01: Airflow 살펴보기

김재민·2023년 6월 23일
0

1. Airflow 란?


: Apache Airflow 는 배치 지향 워크플로우를 개발, 스케줄링, 모니터링하기 위한 오픈소스 플랫폼이다. Airflow 의 웹 인터페이스는 워크플로우 상태를 관리하는 데 도움이 된다. Airflow는 단일 프로세스에서 대규모 워크플로우를 지원하는 분산 설정까지 다양한 방식으로 배포할 수 있다. 이 때, Airflow 의 워크플로우 정의는 '파이썬'을 이용한다.


2. Airflow 배치 지향 워크플로우 vs 모놀리식 배치 구조


: Airflow 가 배치 지향 워크 플로우를 위한 오픈소스 플랫폼이라고 하였다. 그렇다면, 하나의 큰 기능을 위한 배치 스크립트를 crontab 에 등록하여 사용하는 방식 같이 일반적인 모놀리식 스크립트 배치 구조와 Airflow 배치는 어떤 차이점이 있을까?

데이터 파이프라인 예시

: 한 시간 마다 날씨 데이터를 수집하여, 전처리 한 데이터를 데이터베이스에 넣는 데이터 파이프라인을 예시로 각각 어떻게 동작하는지 비교해보겠다.

  1. 공공 날씨 API 호출 및 날씨 데이터 반환
  2. 날씨 데이터를 사용 목적에 맞게 전처리
  3. 전처리 완료 된 데이터를 MySQL에 저장

모놀리식 스크립트 배치

  • 개발 및 스케줄: 위 3단계를 하나의 스크립트로 개발하여 한 시간 마다 스크립트가 수행할 수 있도록 crontab 스케줄에 등록하거나 반복문을 사용하는 등의 별도 트리거를 이용한다.

  • 단점(특징)

    • 3가지 단계 중 특정 단계에서 작업에 실패하면 실패한 시점의 데이터를 적재하기 위해 스크립트 전체를 다시 실행해야한다.
    • 각 단계 별 Task 의존성을 별도로 개발해야 한다. 예를 들어, 1단계에서 실패 했는데, 2단게를 실행하면 안 되기 때문이다.
    • 여러 시점(날짜)의 날씨 데이터 호출에 실패 하였을 경우 개발 수준에 따라 재실행하기 까다롭다.

Airflow 배치 지향 워크플로우

  • 개발 및 스케줄: 위 3단계를 하나의 스크립트로 개발 후 Airflow 스케줄 설정값을 등록하면 사용자 지정 시점마다 배치가 수행된다.(별도 트리거 시스템을 구축하지 않아도 된다.)
  • 장점(특징)
    • 3가지 단계를 각각의 Task 로 관리 하여, 특정 단게에서 작업이 실패하였을 경우 실패한 지점부터 작업을 재수행할 수 있다.
    • 3가지 단계를 각각의 Task 로 관리하기 때문에, WEB UI 에서 배치 수행 시점 별 각 Task 의 성공, 실패, 대기, 실행중 등의 상태를 쉽게 확인할 수 있고, 각각 로그를 따로 확인하기 편리하다.
    • 각 단계 별 Task 의존성을 shift 연산자(>>) 를 이용하여 쉽게 지정할 수 있다.
    • 여러 시점(날짜)의 날씨 데이터 호출에 실패 하였을 경우 WEB UI 또는 Cli 에서 쉽게 긴 범위 배치를 재수행 시킬 수 있다.
    • 파이썬에서 Airflow Operator 를 이용하면 대부분의 서비스(S3, Hadoop, K8S 등...) 와 연동 가능하다.

배치 비교에 대한 나의 생각

: 모놀리식 스크립트를 이용한 배치 관리가 반드시 단점만 있는 것은 아니지만, 일반적으로 Airflow 를 활용할 때 배치 스케줄링이 더 정교하고 편리해지는 것은 사실이다. 위에 언급 된 내용 이외에도 Airflow 의 장점, 단점들이 존재하지만 책 인트로에서 언급 되는 내용을 요약하면 위와 같이 정리해 볼 수 있을 것 같다.


3. 잘 알려진 몇 가지 워크플로우 관리자 비교


: 아래 이미지는 몇 가지 워크플로 관리자와 주요 특성에 대한 비교 표이다. "Airflow 가 가장 좋다" 라기보다는 워크플로우를 정의할 때 파이썬을 사용하기 때문에 조금 더 유연히 개발 가능하며, 스케줄 관리, 백필, 사용자 인터페이스를 제공하기 때문에 별도 시스템을 구축할 필요가 없고, 플랫폼 설치에도 별다른 제약이 없으면서 수평확장 가능하기 때문에 배치 지향 워크플로우를 선택할 때 큰 장점이 있는 것은 분명하다.


4. Airlfow 주요 개념


DAG(Directed Acyclic Graph)

: DAG란 말 그대로 '비순환 그래프' 개념이다. Airflow 에서는 하나의 배치로 DAG 라는 개념을 사용하고 있으며, 아래 이미지 처럼 Task 수행 순서가 단일 방향으로 흐르도록 개발하여 비순환 그래프 조건에 만족 해야한다. 이 때, Task 는 이미지에서 하나의 네모박스를 의미한다.(예: ingest, analyze...)

TASK

: Task 란 배치 작업 내에서 각 작업 단계를 의미한다. Airflow 의 Task 수행 방향은 WEB UI 에서 위 이미지와 같이 화살표로 확인할 수 있다.


5. Airflow 주요 구성 요소


Scheduler

: Airflow 스케줄러는 모든 작업과 DAG를 모니터링한 다음 종속성이 완료되면 작업 인스턴스를 트리거 한다. 스케줄러는 지정된 DAG 파일 경로의 모든 DAG를 모니터링하고 동기화 상태를 유지하는 프로세스를 실행 한다. 기본적으로 스케줄러는 분당 한 번 DAG 구문 분석 결과를 수집하고 활성 작업을 트리거 할 수 있는지 확인한다.

Worker

: 예약 된 Task 를 선택하고 실행한다.

Web Server

: 스케줄러에서 분석한 DAG 를 시각화하고 DAG 실행과 결과(상태)를 확인할 수 있는 주요 인터페이스를 제공한다.

Airflow Scheduler 실행 순서

  1. 사용자가 개발한 DAG 파일 분석 및 각 DAG의 Task, 의존성, 예약주기를 환인한다.
  2. 마지막 DAG 까지 내용을 확인한 후 DAG 의 예약 주기가 경과 했는지 확인한다. 예약 주기가 현재 시간 이전이라면 실행 되도록 예약한다.( 이후 chapter03 에서 자세히 다룬다.)
  3. 예약된 각 Task 에 대해 스케줄러는 해당 Task 의 의존성(= 업스트림 태스크)을 확인한다. 만약, 의존성 태스크가 완료 되었다면 실행 대기열에 추가한다.
  4. 스케줄러는 1단계로 다시 돌아간 후 새로운 루프를 잠시 대기한다.


그리고 위 그림과 같이 Task 가 실행 대기열에 추가 되면 Airflow Worker는 Task 를 실행하고 실행 과정의 모든 결과를 Airflow 메타스토어(DB)에 저장하여 모든 Task 의 상태 값을 WEB 서버(웹 인터페이스)에서 확인할 수 있다.

6. Airflow WEB 인터페이스 살펴보기

Docker compose 실행

: Airflow 책을 학습하는 방법 을 참고하여, Chapter01 학습을 위한 Docker compose 명령을 수행해준다.

$ cd data-pipelines-with-apache-airflow/chapter01/
$ docker-compose up -d
$ docker ps -a

CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS                     PORTS                    NAMES
ebd63bcc4bce   apache/airflow:2.0.0-python3.8   "/usr/bin/dumb-init …"   5 minutes ago   Up 5 minutes               0.0.0.0:8080->8080/tcp   chapter01-webserver-1
b4723af03894   apache/airflow:2.0.0-python3.8   "/bin/bash -c 'airfl…"   5 minutes ago   Exited (0) 3 minutes ago                            chapter01-init-1
4c6388d85919   apache/airflow:2.0.0-python3.8   "/usr/bin/dumb-init …"   5 minutes ago   Up 4 minutes               8080/tcp                 chapter01-scheduler-1
4249b88066e6   postgres:12-alpine               "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes               0.0.0.0:5432->5432/tcp   chapter01-postgres-1

$ open http://localhost:8080 # 또는 웹브라우저에서 주소로 접근 하면 된다.

Airlfow WEB UI 로그인

: ID/PW 모두 admin 이 기본 값이다.

Airflow Dag 확인

: Airlfow 메인 페이지에서 아래 이미지와 같이 사용자가 등록한 DAG 목록과 해당 DAG의 실행 주기, 최근 실행 상태 등을 확인할 수 있다.

Airflow Dag 의 Task 확인

: 특정 DAG 를 클릭한 후 Graph View 탭을 확인해보면 아래 이미지 처럼 해당 DAG 의 각 Task 의 수행 방향과 실행 상태를 모니터링 할 수 있다.


7. Airflow 를 선택하는 이유 요약


1. 파이썬을 이용하여 복잡한 커스텀 파이프라인을 개발할 수 있다.

2. 쉽게 확장 가능하며, 수많은 애드온이 있어 다양한 시스템과 통합 가능하다.

3. 증분 처리를 통해, 전체 파이프라인을 재실행 할 필요 없이 실패 지점만 타겟팅 할 수 있다.

4. 별도 툴 없이 Airflow 웹 인터페이스를 제공하기 때문에 모니터링, 디버깅 등이 편리하다.


8. Airflow 가 적합하지 않은 경우 요약


2. Task 가 추가, 삭제 되는 경우가 빈번한 동적 파이프라인의 경우 적합하지 않다.

3. Python 경험이 전혀 없는 경우 + 급하게 배치 지향 워크플로우를 도입해야 할 때에는 러닝 커브가 최소화 되는 툴을 찾아보는 것이 좋다.


참고


profile
안녕하세요. 데이터 엔지니어 김재민 입니다.

0개의 댓글