[TIL] 데이터 파이프라인, Airflow (1)

이원진·2023년 6월 5일
0

데브코스

목록 보기
41/54
post-thumbnail

학습내용


  1. 데이터 파이프라인이란?

  2. 데이터 파이프라인을 만들 때 고려할 점

  3. 간단한 ETL 작성해보기

  4. Airflow 소개

  5. Airflow 구성

1. 데이터 파이프라인이란?


  • ETL(Extract, Transform, Load)

    • = Data Pipeline = Data Workflow

    • Airflow에서는 DAG(Directed Acyclic Graph)라고 불림

    • 데이터를 데이터 웨어하우스(DW) 외부에서 내부로 가져오는 프로세스(Engineer)

    • ELT

      • DW 내부 데이터를 조작해서 추상화하거너, 요약된 새로운 데이터를 만드는 프로세스(Analyst)

  • 데이터 레이크 vs 데이터 웨어하우스

    • 데이터 레이크(DL)

      • 구조화 데이터 + 비구조화 데이터

      • 보존 기한이 없는 모든 데이터를 원래 형태대로 보존하는 스토리지에 가까움

      • 보통 DW보다 몇 배는 더 큼

      • 다양한 데이터 파이프라인 스케줄링을 위해 Airflow 사용

    • 데이터 웨어하우스(DW)

      • 구조화 데이터

      • 보존 기한이 있는 데이터를 저장하고 처리하는 스토리지

      • Looker, Tableau 등 BI 툴은 보통 DW 사용

  • 데이터 파이프라인 종류

    • Raw Data ETL Jobs(Engineer)

      • 내, 외부 데이터 소스에서 데이터를 읽어 포맷 변환 후 DW에 적재

    • Summary / Report Jobs(Analyst)

      • DW(혹은 DL)에서 데이터 읽어 다시 DW에 쓰기

      • Raw Data를 읽어 요약, 분석 형태의 테이블을 만드는 용도

    • Production Data Jobs

      • DW로부터 데이터를 읽어 다른 스토리지로 쓰는 ETL

      • 요약 정보가 프로덕션 환경에서 성능 상의 이유로 필요하거나, ML 모델에서 필요한 피처들을 미리 계산해두는 경우 사용


2. 데이터 파이프라인을 만들 때 고려해야 할 점


  • 데이터 파이프라인은 버그, 데이터 소스 상의 이슈 등 많은 이유로 실패함

  • 데이터 파이프라인의 수가 늘어나면 유지보수 비용이 기하급수적으로 늘어남

    • 데이터 소스 간의 의존도가 생기기 때문에 더 복잡해짐

  • 가능하면 데이터가 작을 경우에는 매번 통채로 복사해서 테이블 만들기(Full Refresh)

  • 멱등성(Idempotency)을 보장하는 것이 중요

    • 동일한 입력 데이터로 데이터 파이프라인을 다수 실행해도 최종 테이블의 내용이 달라지지 않아야 함

    • SQL 트랜잭션을 사용해 critical point들이 모두 하나의 동작으로 실행되어야 함

  • 실패한 데이터 파이프라인을 재실행하느 것이 쉬워야 함

  • 과거 데이터를 다시 채우는 과정(Backfill)이 쉬워야 함

    • Airflow의 강점

  • 데이터 파이프라인 입출력을 명확히 하고 문서화해야 함

    • 데이터 요청자(비즈니스 오너) 명시

    • 데이터 카탈로그에서 데이터 리스커버리에 사용 가능

  • 불필요한 데이터 주기적으로 삭제

  • 데이터 파이프라인 사고 발생할 때마다 사고 리포트(post-mortem) 작성

    • 같거나 비슷한 사고 재발 방지 목적

    • 사고 원인을 이해하고 이를 방지하기 위한 액션 아이템의 실행이 중요

    • 기술 부채 정도를 나타내는 척도

  • 중요 데이터 파이프라인의 입출력 체크

    • 입력 레코드, 출력 레코드 수 확인

    • 요약 테이블 생성해 PK 존재할 경우 PK uniqueness 보장되는지 확인

    • 중복 레코드 확인


3. 간단한 ETL 작성해보기


  • DW(AWS Redshift) 연결 및 테이블 생성

  • 파이썬으로 extract, transform, load 3개의 함수 작성해 CSV 파일을 DW에 적재


4. Airflow 소개


  • 파이썬으로 작성되었고, 가장 많이 사용되는 데이터 파이프라인(ETL) 프레임워크

  • 데이터 파이프라인 스케줄링 지원

    • 정해진 시간에 특정 ETL 실행 혹은 하나의 ETL 실행 종료 시 다음 ETL 실행

  • ETL을 쉽게 생성할 수 있도록 도와줌

    • 다양한 데이터 소스와 DW를 쉽게 통합할 수 있는 모듈 제공

    • ETL 관리와 관련해 Backfill 등의 다양한 기능 제공

  • ETL을 DAG(Directed Acyclic Graph)라고 부름


5. Airflow 구성


  • 총 5개의 컴포넌트로 구성

    • 웹 서버

    • 스케줄러

      • DAG를 워커에게 배정

    • 워커(Worker)

      • DAG 실행

    • 메타 데이터 DB

      • default: sqlite

      • 다수의 서버로 구성된 경우에만 사용하며, 이 경우 Executor가 달라짐

  • 웹 UI는 스케줄러와 DAG의 실행 상황 시각화

  • 스케줄러와 DAG의 실행 결과는 별도의 DB에 저장

    • 실제 프로덕션 시 MySQL이나 PostgreSQL 사용

  • 스케일링 방법

    • 스케일 업: 서버 사양 증가

    • 스케일 아웃: 서버 추가

  • 구조도

  • Executor 종류

    • Sequential Executor

    • Local Executor

    • Celery Executor

    • Kubernetes Executor

    • CeleryKubernetes Executor

    • Dask Executor

  • Airflow 장점

    • ETL을 세밀하게 제어 가능

    • 다양한 데이터 소스와 DW 지원

    • Backfill이 쉬움

  • Airflow 단점

    • 배우기 쉽지 않음

    • 개발환경 구성이 쉽지 않음

    • 직접 운영하는 것이 쉽지 않아 클라우드 버전 선호

  • DAG

    • 태스크로 구성됨

      • 태스크는 Airflow의 오퍼레이터로 생성됨

        • Airflow에서 다양한 종류의 오퍼레이터 제공, 없을 경우 직접 개발

      • 3개의 태스크로 구성될 경우, Extract, Transform, Load

      • 3개의 태스크로 구성된 DAG로, t1 -> t2 -> t3 순으로 실행됨

    • t1 실행 후 t2와 t3가 분기


메모



0개의 댓글