본문 바로가기
Workflow

Chapter 3. Apache DAG의 구조

by Night Fury 2024. 1. 21.
바스 하렌슬락, 율리안 더라위터르, 『Apache Airflow 기반의 데이터 파이프라인』, 김정민, 문선홍, MANNING-제이펍(2022), p40-61.

 

Scheduling

  • 설정한 시작 날짜를 기준으로 첫 번째 DAG의 실행을 스케줄링
    • 시작 날짜 + 간격
  • Airflow는 종료일이 없으면 DAG를 매일 스케줄 된 대로 영원히 실행
    • end_date에 설정하면 실행 중지 가능
  • cron
    • example
      • 매주 월, 화, 금요일 자정 실행 → 0 0 * * MON, WED, FRI
      • 매일 자정 및 오후 12시에 실행 → 0 0,12 * * *
    • 특정 빈도마다 스케줄을 정의할 수 없는 제약이 있음 (e.g. 3일에 1번 실행)
      • datetime.timedelta(days=3)을 schedule_interval에 기입하는 것으로 해결 가능

 

데이터 증분 처리

  • incremental approach: 스케줄 간격에 해당하는 이벤트만 로드하고 새로운 이벤트만 통계를 계산
    • 스케줄 된 작업에서 처리해야 할 데이터 양을 크게 줄일 수 있음
  • 시작 및 종료 날짜 매개변수를 정의할 수 있도록 설정
    • Jinja 템플릿 구문 활용
  • partitioning을 통해 데이터 세트를 더 작고 관리하기 쉬운 조각으로 분리
    • boilerplate code로 작성
      • boilerplate code: 상용구 코드; 수정하지 않거나, 최소한의 수정으로 여러 곳에 필수적으로 사용되는 코드

 

ETC

  • 간격 기반(interval-based) 시간 표현: 해당 간격의 시간 슬롯이 경과되자마자 해당 간격 동안 DAG가 실행됨
    • 작업이 실행되는 시간 간격(시작, 끝)을 정확히 알고 있는 장점이 있음
    • 증분 데이터 처리 유형을 수행하는데 적합함
    • cron과 같은 시점 기반(point-based) 스케줄링에서는 이전 실행이 중단된 위치를 계산하거나 추측해야 함
  • 백필(backfilling): 과거 데이터 세트를 로드하거나 분석하기 위해 DAG의 과거 시점을 지정해 실행하는 것
    • Airflow는 기본적으로 아직 실행되지 않은 과거 스케줄 간격을 예약하고 실행함
      • 과거 시작 날짜를 지정하고, 해당 DAG를 활성화하면 현재 시간 이전에 과거 시작 이후의 모든 스케줄 간격이 생성됨 (DAG의 catchup 매개변수에 의해 제어됨)
      • backfill on: catchup=True
      • backfill off: catchup=False
    • 최대 30일의 기록까지만 제공함
  • 원자성(atomicity): 모든 것이 완료되거나 완료되지 않도록 보장해야 함
    • 별도의 기능은 별도의 task로 분리 → 개별 task화
    • 의존성이 강하게 발생하는 경우, 단일 task에 복수의 작업을 유지하는 것이 나을 수 있음
  • 멱등성(idempotency)
    • 동일한 입력으로 동일한 태스크를 여러 번 호출해도 결과에 효력이 없어야 함
    • 데이터의 중복이 발생하면 안 됨
      • partitioning → task 결과를 덮어 쓸지 여부
      • database → upsert
반응형

'Workflow' 카테고리의 다른 글

Chapter 2. Apache DAG의 구조  (0) 2024.01.15
Chapter 1. Apache Airflow 살펴보기  (1) 2024.01.10

댓글