Home Airflow Lecture 3
Post
Cancel

Airflow Lecture 3

ETL : Extract, Transform, Load

  • Data Pipeline, ETL, Data Workflow, DAG(Directed Acyclic Graph)
  • ELT : Data-warehouse 내에 이미 있는 내부 데이터를 조작해서 요약된 데이터를 만드는 것.

Data Lake vs Data Warehouse

  • Data Lake : 구조화된 데이터 + 비구조화 데이터
    • 보존기한이 없는 모든 데이터를 원래 형태로 보존
  • Data Warehouse : 보존기한이 있는 구조화된 데이터.
    • BI 툴들이 주로 Data Warehouse를 백엔드로 사용한다.

Data Pipelines

  • Raw Data ETL Jobs
  • Summary/Report ELT Jobs
  • Production Data Jobs
    • Cassandra/Hbase/DynamoDB 같은 NoSQL
    • MySQL(OLTP)
    • Redis/Memcache 같은 캐시
    • ElasticSearch 같은 검색엔진

Simple ETL

  • https://colab.research.google.com/drive/1nITNr8_z6DDHVXtZ08C8RYDxJDdtHb0O?usp=sharing
  • FULL REFRESH <-> INCREMENTAL UPDATE
    • FULL REFRESH : 매번 소스의 내용을 다 읽어오는 방식 -> 효율성이 떨어질 수 있지만 간단하고, 소스데이터에 문제가 생겨도 다시 다 읽어오므로 유지보수가 쉽지만 데이터가 커지면 사용불가.
    • INCREMENTAL UPDATE : 효율성이 좋지만 유지보수가 힘들어진다. -> 보통 daily나 hourly로 동작한다. -> Backfill 이슈가 있음
  • TRANSACTION

Airflow

  • Data-Pipeline 스케줄링 도구 - 큰 회사(구글 클라우드 등) 에서 사용중인 버전 확인
  • 다양한 데이터 소스와 데이터 웨어하우스를 지원
  • 백필(Backfill)이 쉬움
  • 단점 : 개발환경 셋업이 쉽지 않고 배우기가 어려움

Airflow Component

  • 1) Web Server
  • 2) Scheduler
  • 3) Worker -> 얘를 늘리는 형태로 scale out
  • 4) Database (sqlite가 기본)
  • 5) Queue (Worker가 다수인 경우)

DAG(Directed Acyclic Graph)

  • Airflow에서 ETL을 부르는 명칭
  • DAG는 task로 구성됨 (ex: Extract, Transform, Load)
    • task 는 Airflow의 Operator 로 만들어지며, 이미 다양한 종류의 Operator를 제공함. 없다면 직접 개발해야 한다.
  • schedule 은 crontab 문법을 따름 -> 모든 시간은 utc 기준.
    • *(A’) *(B’) *(C’) *(D’) *(E’)
    • A’ : minute(0~59)
    • B’ : hour(0~23)
    • C’ : day of month(1~31)
    • D’ : month ot year(1~12)
    • E’ : day of week(1~7)

Data-Pipeline 고려할 점

  • 가능하다면 Full Refresh 하라.
    • incremental update 만이 가능하다면 created, modified, deleted 필드를 추가하자.
  • 멱등성(idempotency)을 보장하자.
  • 과거 데이터를 다시 채우는 과정(Backfill)이 쉬워야 한다. -> Airflow의 강점
  • 데이터 파이프라인의 입력과 출력을 명확히 하고 문서화한다.
    • 주기적으로 쓸모없는 데이터들을 삭제
  • 데이터 파이프라인 사고 시 사고 리포트(post-mortem) 쓰기.
    • 중복레코드, pk 보장 등 확인하자.

Backfill(incremental update 에서 의미가 있음)

  • 날짜값 등 파라미터 값을 DAG에서 직접 구하거나, 하드코딩하는 방식이 아니라, Airflow에서 넘겨받아 처리하도록 한다.

Airflow 설치

1
2
3
4
5
6
7
8
9
... git 파일 unlaod

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'

# airflow webserver permission error는 공식문서 방법대로 처리하면 됨
mkdir -p ./dags ./logs ./plugins \
echo -e "AIRFLOW_UID=$(id -u)" > .env

This post is licensed under CC BY 4.0 by the author.