바스 하렌슬락, 율리안 더라위터르, 『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에 기입하는 것으로 해결 가능
- example
데이터 증분 처리
- incremental approach: 스케줄 간격에 해당하는 이벤트만 로드하고 새로운 이벤트만 통계를 계산
- 스케줄 된 작업에서 처리해야 할 데이터 양을 크게 줄일 수 있음
- 시작 및 종료 날짜 매개변수를 정의할 수 있도록 설정
- Jinja 템플릿 구문 활용
- partitioning을 통해 데이터 세트를 더 작고 관리하기 쉬운 조각으로 분리
- boilerplate code로 작성
- 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일의 기록까지만 제공함
- Airflow는 기본적으로 아직 실행되지 않은 과거 스케줄 간격을 예약하고 실행함
- 원자성(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 |
댓글