[Airflow] Airflow 기본 개념 정리

MINJI·2024년 11월 12일

⭐ Airflow 소개

1. Airflow란?

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

⭐ Airflow 구성

1. 컴포넌트

1) 웹 서버 (Web Server)

2) 스케줄러 (Scheduler)

  • DAG들을 워커들에게 배정하는 역할 수행

3) 워커 (Worker)

  • 실제 DAG를 실행하는 역할 수행

4) 메타 데이터 데이터베이스

  • Sqlite가 기본 설치

5) 큐 (다수 서버 구성인 경우에만)

  • Executor가 달라짐

2. Airflow 구조

서버 1대

다수 서버

3. Airflow 스케일링 방법

  • 스케일 업 (더 좋은 사양의 서버 사용) ✅추천!
  • 스케일 아웃 (서버 추가)
    • 비용 추가, 관리 어려움

4. Airflow 개발의 장단점

장점

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

단점

  • 배우기가 쉽지 않음
  • 상대적으로 개발환경을 구성하기가 쉽지 않음
  • 직접 운영이 쉽지 않음. 클라우드 버전 사용이 선호됨

5. DAG란?

  • Directed Acyclic Graph의 줄임말
  • Airflow에서 ETL을 부르는 명칭
  • DAG는 태스크로 구성됨
  • 태스크란? Airflow의 오퍼레이터(Operator)로 만들어짐

⭐ 트랜잭션 이해하기

1. 트랜잭션이란?

  • 중간에 실패하면 불완전 상황에 놓이는 작업들이 있다면?
  • ex. 은행 이체 과정에서 내 계좌 인출(O) -> 다른 사람 계좌 송금(X) 경우 문제가 생기니 이 과정을 하나로 보고 실패하면 그 이전 상태로 되돌리는 것

Atomic하게 실행되어야 하는 SQL 들을 묶어서 하나의 작업처럼 처리하는 방법

  • BEGINEND/COMMIT 사이에 SQL 사용
  • ROLLBACK은 BEGIN 이전 상태로 돌아가라는 SQL 명령어

2. 트랜잭션 구현방법

autocommit=True

  • 모든 SQL statement가 바로 물리 테이블에 커밋됨
  • 이를 바꾸고 싶다면 BEGIN;END; or BEGIN;COMMIT; 사용 (or ROLLBACK)

autocommit=False

  • 모든 SQL statement가 커밋되지 않음

try/except 사용시 유의할 점

  • except에서 raise를 호출하면 발생한 원래 exception이 위로 전파됨
  • ETL을 관리하는 입장에서 어떤 에러인지 명확하게 드러나는 것이 더 좋음
try:
	cur.execute(create_sql)
    cur.execute("COMMIT;")
except Exception as e:
	cur.execute("ROLLBACK;")
    raise

0개의 댓글