본문 바로가기
Book & Lesson

[데엔스터디4] ETL/Airflow소개

by 카프리썬_ 2021. 9. 3.
728x90
728x90

데이터엔지니어링 스타터 키트 -4주차 후기

아래의 내용은 직접 유료강의를 수강하고, 배운점 및 추가로 공부한 내용을 기록한 내용입니다.

프로그래머스에서 진행하는 실리콘밸리에서 날아온 데이터엔지니어링 스타터키트 강의추전! 

 


ETL이란?

ETL : Extract, Transform, Load

하나의 데이터 소스에서 어떤 데이터 하나를 읽어다가, (Extract)

원하는 포맷으로 바꿔서, (Transform)

그걸 DW에 테이블로 로딩하는 작업 (load)

 

ELT : Extract, Load, Transform

하나의 데이터 소스에서 어떤 데이터 하나를 읽어다가, (Extract)

Transform작업 없이 다 '데이터레이크'에 복사하고, (Load)

데이터레이크 중에서 의미가 있고 최근 데이터만 원하는 포맷으로 바꿔서 사용 (Transform)

 

ETL과 ELT의 차이점

내가 이전에 한번 정리한 내용  + 수업때들은 내용 요약정리 

2021.08.16 - ETL ELT 차이 | 요즘엔 ETL에서 ELT로 흐름이 바뀌고 있다?@!

 

ETL ELT 차이 | 요즘엔 ETL에서 ELT로 흐름이 바뀌고 있다?@!

ETL이란? Extract, Transform, Load 의 앞글자를 딴 용어인데, 여러가지 데이터소스에서 추출(Extract)하고, 데이터를 원하는 형태로 변형(Transform)하고, DW로 적재(Load)하는 과정. 즉, 데이터소스에서 가져온

pearlluck.tistory.com

 

데이터파이프라인이란?

소스에서 목적지로 데이터를 옮겨주는 작업

소스→DL, DL→DW, 소스→DW, DW→ DW등 각각의 단계가 데이터파이프라인이 된다 

 

데이터파이프라인 형태

  • raw data ETL하는 job
  • Summary/Report를 만드는 job
  • DW -> Product 스토리지에 저장하는 job 

간단한 ETL작성해보기

내가 지금까지 의식하지 않고 python으로 개발했던 경험들이 다 데이터파이프라인을 작성하는 부분이여서 신기했다.

예를 들면 CSV나 API를 통해서 데이터를 가지고 오는것은 extract에 해당했고, 

그 데이터들을 가지고 dafaframe으로 변형해서 사용하는건 transform에 해당했고,

마지막으로 그 데이터들을 별도의 db나 redshift에 저장하는게 load에 해당했다. 

 

Airflow란?

ariflow의 특징

  • 파이썬기반의 데이터파이프라인 프레임워크 -> ETL작성 및 관리(실행순서,재실행,backfill) 유용하다
  • 웹ui 지원
  • DAG : 데이터파이프라인 하나의 단위 , 하나이상의 task로 구현
  • TASK : 에어플로우의 operator, extract, transform, load 등 각각의 task가 되고 task간의 실행순서 정의가능
  • 다수의 서버로 분산이 가능한 클러스터 (스케일아웃 지원)
  • DAG의 과거 실행정보를 기록할 DB필요 (기본 sqlite)
  • 2020.12 2.0버전 release

ariflow의 컴포넌트

  • 웹서버
  • 스케쥴러 : 스케쥴링 시간이 되면 이 DAG를 실행해야하는구나! → 워커한테 넘김
  • 워커 : 스케쥴러에 의해 받은 DAG실행! , 실제 DAG코드가 구현되는 컨테이너 역할
  • DB : 기본 sqlite ->  MYSQL,postrgeSQL 별도로 설치해서 사용
  • 큐 : DAG의 task를 큐에 넣으면, 큐에서 task를 하나씩 읽어다가 워커에 나눠줌 (Multi-node 일때 필요)

ariflow의 확장(Scaling)

  • scale up : 노드 하나를 쓸 땐 더 좋은 사양의 서버를 사용하는 것
  • scale out : 서버(워커노드)를 한대 더 추가하는 것, 에어플로우는 스케일아웃 지원

ariflow의 장단점

  • 장점 : ETL작성 및 관리(실행순서,재실행,backfill) 유용하다
  • 단점 : 배울때 learning curve존재 (용어이해), 클러스터관리 -> 자동관리를 위해 클라우드 Saas사용하기

DAG 생성예시

  • 파이썬 코드 import : from airflow import DAG
  • dag의 속성지정 (deafult_args )
    • 시작일(start_date): 실제로 실행되는 날짜가 아니라 DAG가 COPY를 해야하는 날짜
    • 종료일(end_date) 
    • 이메일 : 실패하면 받을 주소
    • retries : 재시작횟수
    • retry_delay : 재시도하기 위해 기다리는 시간
  • DAG의 객체 파라미터
    • 첫번재인자 : DAG 이름 → 웹 UI에 나옴
    • schedule_interval : 크론탭이랑 동일한 규칙으로 적용
    • deafult_args : 앞에서 생성한 dag의 속성(deafult_args)을 넣음

 

데이터파이프라인 생성시 고려해야할점 

어떤 문제가 생길 수 있는가? 

  • 결국 python으로 직접 짠 코드이기 때문에 '버그'가 있다. 항상 잘 돌아갈 것이라는건 환상! 
  • 데이터소스에 따라서 문제가 생길수도 있다. 이건 해결할 수 없음 
  • 데이터파이프라인이 많아지면 dependency가 생기고, 유지보수 비용이 늘어난다. 

그래서 어떻게 해야하나?

  • 데이터가 작으면 매번 통쨰로 읽어다가 업데이트하는게 제일 좋다 (incremental update는 복잡도가 올라감)
  • 멱등성을 보장: 동일한 입력 데이터로 데이터파이프라인을 다수 실행해도 최종 테이블의 내용이 달라지지 않는다.
  • 실패한 데이터파이프라인 재실행/backfill이 쉬워야한다 -> execution_data 파라미터 사용
  • 데이터파이프라인의 입력과 출력을 명확히 하고 문서화
  • 사고날때마다 사고리포트

 

 

728x90
반응형