데이터 엔지니어링/AirFlow

[Airflow] 기반의 데이터 파이프라인(1)

안용감한호랑이 2023. 10. 11. 00:02

Apache Airflow 기반의 데이터 파이프라인을 읽고 정리하였습니다.

 


Airflow

 

1. 파이썬 코드로 유연한 파이프라인 정의

Airflow를 사용하면 파이프라인이나 워크플로 태스크를 방향성 비순환 그래프(DAG)로 정의할 수 있다.

Airflow는 파이썬 스크립트로 DAG의 구조를 설명하고 구성하기 때문에 각 DAG 파일은 주어진 DAG에 대한 태스크 집합과 태스크 간의 의존성을 기술하고 실행 방법, 시간 등을 정의한다.

 

2. 파이프라인 스케줄링 및 실행

DAG로 파이프라인 구조를 정의하고 나면 Airflow가 파이프라인을 언제 실행할 것인지 각각의 DAG 실행 주기를 정의할 수 있다.

이를 통해 매시간, 매일, 매주 등의 DAG를 실행하거나 더 복잡한 스케줄을 사용할 수 있다.

 

3. 구성

  • Airflow Scheduler : DAG를 분석하고 현재 시점에서 DAG의 스케줄이 지난 경우 Airflow 워커에 DAG의 태스크를 예약한다.
  • Airflow Worker : 예약된 태스크를 선택하고 실행한다.
  • Airflow Web Server : 스케줄러에서 분석한 DAG를 시각화 하고 DAG 실행과 결과를 확인 할 수 있는 주요 인터페이스를 제공한다.

 

4. 스케줄러의 단계

  1. 사용자가 DAG 워크플로우를 작성하면, 스케줄러는 DAG 파일을 분석하고 각 DAG 태스크, 의존성 및 예약 주기를 확인한다.
  2. DAG의 예약 주기가 경과 했는지 확인한다. 만약 예약 주기가 현재 시간 이전이라면 실행되도록 예약한다.
  3. 예약된 각 태스크에 대해 스케줄러는 해당 태스크의 의존성을 확인한다. 의존성 태스크가 완료되지 않았따면 실행 대기열에 추가한다.

 

Airflow를 선택하는 이유

  • 파이썬 코드를 이용해 파이프라인을 구현할 수 있기 때문에 파이썬 언어에서 구현할 수 있는 대부분의 방법을 사용하여 복잡한 커스텀 파이프라인을 만들  수 있다.
  • Airflow는 쉽게 확장 가능하고 다양한 시스템과 통합이 가능하다. (DB, Cloud 서비스 등)
  • 파이프라인을 정기적으로 실행하고 점진적 처리를 통해, 전체 파이프라인을 재실행할 필요 없는 효율적인 파이프라인 구축이 가능하다.
  • 백필 기능을 사용하면 과거 데이터를 손쉬베 재처리할 수 있기 때문에 코드를 변경한 후 재생성이 필요한 데이터 재처리가 가능하다.
  • 웹 인터페이스를 통해 파이프라인 실행 결과를 모니터링할 수 있고 오류를 디버깅하기 위한 편리한 뷰를 제공한다.

 

 

Airflow가 적합하지 않은 경우

  • Airflow는 반복적이거나 배치 태스크를 실행하는 기능에 초점이 맞춰져 있기 때문에, 스트리밍 워크플로 및 해당 파이프라인 처리에 적합하지 않을 수 있다.
  • 추가 및 삭제 태스크가 빈번한 동적 파이프라인의 경우 적합하지 않을 수 있다. Airflow는 동적 태스크를 구현할 수 있지만, 웹 인터페이스는 DAG의 가장 최근 실행 버전에 대한 정의만 표현해 준다. 따라서 Airflow는 실행되는 동안 구조가 변경되지 않는 파이프라인에 좀 더 적합하다.
  • 파이프라인 규모가 커지면 굉장히 복잡해질 수 있어 초기 사용 시점부터 엄격한 관리가 필요하다.
  • 워크플로 및 파이프라인 관리 플랫폼이며 데이터 버전 관리, 데이터 리니지 등의 확장 기능은 제공하지 않는다.