데브코스-데이터엔지니어링

Airflow 란 무엇인가?

묠니르묘묘 2024. 5. 26. 15:45

1. Airflow 소개

  • 파이썬으로 작성된 데이터 파이프라인(ETL) 프레임워크
    • Airbnb에서 시작한 아파치 오픈소스 프로젝트
    • 가장 많이 사용되는 데이터 파이프라인 관리 및 작성 프레임워크
  • 데이터 파이프라인 스케줄링 지원
    • 정해진 시간에 ETL 실행 or 한 ETL의 실행이 끝나면 다음 ETL 실행
    • 웹 UI 제공
  • 데이터 파이프라인(ETL)을 쉽게 만들 수 있게 해줌
  • 데이터 파이프라인을 DAG(Directed Acyclic Graph)라고 부름
    • 1개의 DAG는 1개 이상의 태스크(task)로 구성

 

2. Airflow 구성

  • 웹 서버(Web Server)
    • 웹 UI는 스케줄러와 DAG의 실행 상황을 시각화해줌
    • Python Flask로 구현되어 있음
  • 스케줄러 (Scheduler)
    • DAG들을 워커들에게 배정하는 역할 수행
    • 스케줄러와 각 DAG의 실행 결과는 별도 DB에 저장됨
    • 정해진 시간에 실행되게 할 수 있으며, 순차적 태스크 진행
  • 워커 (Worker)
    • DAG를 실행하는 역할 수행
  • 메타 데이터 데이터베이스 (Metadata Database)
    • SQLite 가 기본 설치
    • 실제 프로덕션에서는 MySQL 이나 Postgres 를 사용해야 함
  • 큐 (Queue)
    • 다수 서버 구성인 경우에만 사용
    • 이 경우 Executor가 달라짐

 

3. Airflow 구조 : 서버 한대

Airflow 서버 한대 구조

 

4. Airflow 구조 : 다수 서버

Airflow 서버 다수 구조

  • 스케일링 할 때는 워커를 별도의 서버에서 돌리고, 워커가 있는 서버의 수를 늘리는 형태로 용량 증대

 

5. Airflow 구조

Airflow 구조

  • 사용자는 UI 를 통해서 웹 서버와 통신
  • Airflow 서버 안에는 DAG Directory 가 있고, 여기에 파이썬으로 작성된 데이터 파이프라인 코드가 있음
  • 위 다렉토리를 Airflow가 주기적으로 파싱해서 Metadata DB에 기록
  • 스케줄러가 Executor 를 통해서 워커들에게 일을 주는데, Executor 특성에 따라서 Queue 가 있기도 하고 없기도 함

 

6. Airflow 개발 장단점

장점

  • 데이터 파이프라인 세밀하게 제어 가능
  • 다양한 데이터 소스와 데이터 웨어하우스 지원
  • 백필(Backfill) 쉬움

단점

  • 배우기 쉽지 않음
  • 상대적으로 개발환경 구성하기 쉽지 않음
  • 직접 운영이 쉽지 않으며, 클라우드 버전 사용이 선호됨
    • GCP provides "Cloud Composer"
    • AWS provides "Managed Workflows for Apache Airflow"
    • Azure provides "Data Factory Managed Airflow"

 

7.  DAG 란?

  • Directed Acyclic Graph
  • Airflow 에서 ETL 을 부르는 명칭
  • DAG는 태스크로 구성
    • e.g. 3개의 태스크로 구성된다면 Extract, Transform, Load 로 구성

 

8. 태스크(task)란?

https://magpienote.tistory.com/193

  • Airflow의 기본 실행 단위
  • Airflow 의 오퍼레이터(Operator)로 만들어짐
  • Airflow 에서 이미 다양한 종류의 오퍼레이터 제공
  • 경우에 맞게 사용하며, 오퍼레이터를 결정하거나 필요하다면 직접 개발
  • e.g. Redshift writing, Postgres query, S3 Read/Write, Hive query, Spark job, shell script

 

8. DAG 구성 예제

  • 3개의 Task로 구성된 DAG
  • 먼저 t1 실행되고 t2,t3 순으로 순차적 실행

 

  • 3개의 Task로 구성된 DAG
  • 먼저 t1 실행되고 t2와 t3가 병렬 실행