상세 컨텐츠

본문 제목

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

Data Platform/데이터 엔지니어링

by leediz 2022. 5. 17. 05:10

본문

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

이번 주의 주제는 ETL/Airflow 소개이다. 드디어 Airflow에 대해 본격적으로 배우는 시간을 갖는다. 그 전에 Airflow를 사용하는 이유라고 할 수 있는 ETL에 대해 맥스님의 경험을 토대로 알아보며 관련 용어들에 대해 설명을 해주셨다. 그리고 Airflow를 사용하며 모르고 사용했을 경우 치명적일 수도 있는 Backfill 방식에 대해 설명해 주셨다. 이번 포스팅에서는 세션에서 다룬 용어 및 Airflow에 대해 간략하게 다뤄보겠다.

 

데이터 파이프라인이란?

  • ETL: Extract, Transform, Load의 약자
  • Data Pipeline, Data Workflow, DAG 등의 용어와 호환할 수 있음
  • Data Source에서 원하는 데이터를 추출해서 원하는 포맷으로 변환 후 Data Destination에 적재
  • VS ELT - 데이터 저장후 필요한 포맷으로 변환

 

Data Lake vs Data Warehouse

Data Lake & ELT

  • 정형 데이터와 비정형 데이터 등 다양한 데이터 포맷을 저장하는 저장소
  • 저렴한 비용으로 데이터 보관주기의 제약없이 모든 히스토리성 데이터를 저장
  • 데이터 웨어하우스에 비해 더 큰 규모의 저장소를 의미
  • ELT - 데이터를 프로세싱하는 아키텍처에 가까움
    • Source가 되는 데이터가 DW 또는 Data Lake에 있고, 가져와서 변환하여 어딘가로 저장

Data Warehouse

  • 좀 더 정제되고 구조화된 데이터를 저장하며 보관 주기가 있음
  • 일반적으로 BI Tool을 연결하여 사용됨

 

Airflow

Airflow 소개

  • Airflow는 파이썬 기반의 데이터 파이프라인 프레임워크
  • Apache Top Level Project
  • Python으로 데이터 파이프라인을 만들고 스케줄링하고 모니터링 함
  • Web UI로 데이터 파이프라인을 스케줄링하고 모니터링 할 수 있음
  • Airflow에서 데이터 파이프라인은 DAG(Directed Acyclic Graph)라고 명명함
  • Airflow는 클러스터링도 가능 함
    • 하지만 클러스터링을 운영하는 것은 쉽지 않으므로 클라우드 버전을 사용하는 것을 추천함
  • Airflow 설치 시에 메타데이터 관리를 위해 DB가 필요
    • Default로 설정된 SQLite는 완전 비추 - 너무 느림
    • MySQL 또는 Postgres를 사용

 

Airflow의 구성

  1. Web Server
  2. Scheduler
    • DAG의 실행스케줄 관리 및 실행시작
  3. Worker
    • 실제로 DAG를 실행해주는 역할
  4. Database (Default는 Sqlite)
    • 메타데이터 관리
  5. Queue (멀티노드 구성인 경우만)
    • 이 경우 Executor가 달라짐 (CeleryExecutor, KubernetesExecutor)

출처 :  https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html

 

DAG란

  • DAG는 Directed Asyclic Graph의 약자
  • 비 순환적으로 방향성을 가진 Tasks의 흐름
  • DAG는 Tasks의 한 구성 요소

  • 위 예시는 3개의 Tasks로 구성된 간단한 DAG 예시
  • t1 task가 실행된 후 t2, t3로 분기되어 실행되는 예제

 

Airflow의 Backfill 방식 - DAG의 start_date 이해하기

  • 예를 들어 2022년 5월 15일부터 매일매일 하루치 데이터를 읽어온다고 가정할때
  • 언제부터 해당 ETL이 동작해야 하나?
    • 2022년 5월 16일
  • 2022년 5월 16일에 동작하지만 읽어와야 하는 데이터의 날짜는?
    • 2022년 5월 15일
    • Airflow의 start_date 옵션은 시작 날짜라기 보다 읽어와야 하는 날짜
  • 신경써야 하는 날짜는 2개
    • 내가 읽어오고 싶은 data의 날짜 - 2022년 5월 15일
    • DAG가 실행되어야 하는 날짜 - 2022년 5월 16일

execution_datestart_date의 값이 지정 됨 - 내가 읽어오고 싶은 date의 날짜 (실제 실행시킨 날짜가 아님)

  • 2022-05-15 09:00:00로 start_date가 설정된 daily job이 있다고 가정할 때, 현재 시간이 2022-05-17 21:00:00 이고 처음으로 이 job이 활성화 되었을 때 job은 몇번 실행되었을까? - 총 2번 실행됨
    • 2022-05-15 09:00:00 ~ 2022-05-16 08:59:59 / execute_date: 2022-05-15
    • 2022-05-16 09:00:00 ~ 2022-05-17 08:59:59 / execute_date: 2022-05-16
  • start_date는 job을 처음 실행시키는 시간이 아닌 해당 날짜를 기준으로 실행하게 하는 날짜

 

4주차 소감

Airflow에 대해 본격적으로 배우기 시작하며 어렴풋이 알고 있었던 용어들도 함께 정리를 했다. 모르고 사용했을 경우 치명적일 수 있는 backfill에 대해 배우며 start_dateexecute_date의 개념을 배워서 실제 업무에서 유용하게 적용했다.
세션 마지막에는 맥스님이 미리 만든 Python 기반의 ETL 코드를 요구사항에 맞게 수정하는 과제와 EC2 인스턴스를 하나 제공받아 가이드에 따라 Airflow를 설치하는 과제가 주어졌다. 기존에는 CentOS OS로 Airflow를 설치해본 경험이 있으나 Ubuntu여서 살짝 어색했지만 큰 차이는 없었다. 다만, 기존에 설치되어있던 pytho3.6 버전과 과제로 설치하려는 Airflow의 호환성이 맞지 않아 Python을 다시 3.8버전으로 설치하고 Airflow를 설치했더니 문제없이 설치되었다. 이제 판을 깔았으니 다음 주차부터 좀 더 딥하게 배우며 사용하는 시간이 될것 같다.

 

참고자료

관련글 더보기

댓글 영역