오늘 배운 것🤓
데이터 파이프라인
데이터 파이프라인이란?
- 데이터를 소스로부터 목적지로 복사하는 작업
- Data Worflow 혹은 DAG(Airflow에서) 혹은 ETL이라고 한다.
- 보통 코딩(Python)과 SQL로 이루어진다.
ETL vs ELT
- ETL
- Extract, Transform, Load
- 데이터를 외부에서 내부로 가져오는 프로세스
- 보통 타부서에서 요구하면 엔지니어들이 수행한다.
- ELT
- 내부의 데이터를 조작해서 조금 더 추상화하거나 요약 및 정리한 새로운 데이터를 만드는 프로세스
- 보통 데이터 분석가들이 수행한다.
데이터 파이프라인 종류
- Raw Data ETL Jobs
- E : 외부와 내부 데이터 소스에서 데이터를 읽고
- T : 적당한 데이터 포맷 변환 후(필요없다면 X)
- L : DW에 적재
- 보통 엔지니어가 진행한다.
- Summary/Report Jobs(ELT)
- DW/DL에서 데이터를 읽어 변환 후 다시 DW/DL에 저장
- Raw Data를 읽어서 일정의 리포트 형태아 summary 형태의 테이블을 다시 만듬
- 보통 분석가가 진행하고 Analytics Engineering이라고도 한다.
- 특수한 경우 A/B 테스트 결과를 분석하는데 데이터 파이프라인으로 구성하기도 함(이때는 엔지니어가)
- 데이터 엔지니어 관점에서는 데이터 분석가들이 편하게 할 수 있도록 환경을 만들어 주는 것이 관건
- Production Data Jobs
- 파이프라인의 목적지가 바깥으로 가는 경우
- DW로부터 데이터를 요약하여 Production DB에 사용하는 경우
- summary정보가 production 환경에서 성능 이유로 필요한 경우(실시간 집계가 부하를 일으키는 경우)
- ML 모델에서 필요한 feature들을 미리 계산하는 경우
- Target Storage
데이터 파이프라인을 만들 때 고려해야할 점
- 현실을 직시할 것
- 버그를 무서워하지 말자!
- 데이터 소스 상의 이유(포맷 등)
- 파이프라인 사이의 의존도에 대한 이해도가 부족한 경우
- 데이터 파이프라인의 수가 늘어나면 유지보수 비용이 급격히 늘어난다.
데이터 파이프라인 Best Practices
- Full Refresh
- 데이터 소스에서 DW로 복사할 때 가능하면 통째로 복사
- 멱등성(Idempotency) 보장
- 동일한 입력 데이터로 데이터 파이프라인을 다수 실행해도 최종 테이블의 내용이 동일해야 한다.
- Backfill이 쉬어야 한다.
- 실패한 데이터 파이프라인의 재실행이 쉬워야 한다.
- 입력과 출력 문서화
- 데이터 리니지(데이터 사이의 의존성) 문제 최소화
- 주기적으로 필요없는 데이터 삭제
- 사고마다 사고 리포트(post-mortem) 쓰기
- 중요 데이터 파이프라인의 input/output 체크
Airflow
Airflow 란?
- Python으로 작성된 데이터 파이프라인 관리/작성 framework
- Airbnb에서 시작된 Apache 오픈소스 프로젝트
- 데이터 파이프라인 스케줄링 지원
- 정해진 시간에 실행
- 하나의 ETL 실행 후 다음 ETL 실행
- 웹 UI 제공
- 실행 상황, log를 통함 디버깅, backfill등 다양한 기능 제공
- 데이터 파이프라인을 쉽게 작성하도록 함
- 데이터 소스와 DW를 쉽게 통합해주는 모듈 제공
- Airflow에서 데이터 파이프라인을 DAG라고 부름
DAG
- Directed Acyclic Graph의 줄임말
- 하나의 DAG는 하나 이상의 Task로 구성된다.
- task는 Airflow의 Operator로 만들어진다.
- Airflow에서 다양한 종유릐 오퍼레이터를 제공한다.
- 이미 만들어진 오퍼레이터를 선택하거나 직접 작성할 수 있다.
Airflow 구성
- 웹 서버(Webserver)
- python flask로 구성
- 스케줄러와 DAG의 실행 상황을 시각화
- 스케줄러(Scheduler)
- 워커(Worker)
- 실제로 DAG를 실행하는 역할을 수행
- 서버의 CPU 수 만큼 워커가 돌 수 있다.
- 메타데이터베이스
- sqlite가 기본이나 성능상의 문제로 MySQL, PostgreSQL을 별도로 설치하여 사용한다.
- 스케줄러와 각 DAG의 실행결과를 저장한다.
- 큐(Queue)
- 다수 서버 구성인 경우 사용한다.(단일일 때도 사용함)
- executor의 종류에 따라서 사용 여부가 결정된다.
Airflow 장점 vs 단점
장점 | 단점 |
---|
- 데이터 파이프라인을 세밀하게 제어 | - 배우기가 쉽지 않다. |
- 다양한 데이터 소스와 DW 지원 | - 상대적으로 개발 환경을 구성하기 쉽지 않다. |
- Backfill이 쉽다. | - 직접 운영이 쉽지 않으므로 다수의 서버를 구성할 경우 cloud 사용을 추천 |
느낀 점😊
이번 수업에서는 데이터 파이프라인과 airflow의 기본적인 이론과 함께 python으로 간단한 파이프라인을 만들어봤다.
가장 기대하는 수업 중 하나였기 때문에 다른 수업에 비해 조금더 집중이 잘되는 느낌?!ㅎㅎ