Airflow 스케줄 이해하기

JP·2023년 6월 22일
0

Airflow

목록 보기
2/2
post-thumbnail

Airflow 스케줄 전략

Airflow는 DAG(Directed Acyclic Graph, 비순환그래프)를 기반으로 연속적인 테스크들을 수행함

이때 DAG에서 중요한 설정 중 하나는 DAG를 실행하는 시간임
어떤 주기로 DAG를 실행할 것인지 중요함

이전 글에서 DAG의 schedule_interval로 주기를 설정하였음 (이전 글 Airflow 간단하게 실습해보기)

정기적 실행 전략 세가지

  1. 간격 기반 스케줄링 방식
  2. 시점 기반 스케줄링 방식
  3. 빈도 기반 스케줄링 방식

간격 기반 스케줄링 방식 (interval-based)

  • 특정 시작 날짜와 종료 날짜를 지정
  • 명시적 간격 동안의 데이터를 대상으로 실행
  • 데이터 증분 처리에 알맞음 (특정 시점에 생성된 데이터를 타겟으로 함)
  • Airflow 실행 시점과 설정 시작 날짜는 상이함
  • 간격을 설정하고 트리거로 시점 기반 또는 빈도 기반 스케줄링 방식을 사용

시점 기반 스케줄링 방식 (point-based)

  • Cron 방식으로 주기적 실행이 중요한 테스크에 사용 (예시-매주 금요일 오전 12시 실행)
  • 간격 기반 스케줄링 방식에서 트리거 역할 수행
  • 특정 시작 시점만 지정
  • 시작 지점만 지정 테스크가 언제 끝날지 예측 어려움 추정만 가능

빈도 기반 스케줄링 방식 (frequency)

  • 설정한 특정 빈도로 실행하는 방식 (하루, 삼일, 한달 등)

정기적 실행 설정

  1. 간격 설정
  2. cron 설정
  3. 매크로 설정
  4. 빈도 설정

간격 설정

  • Ariflow DAG 객체 생성시 start_date / end_date 설정
dag = DAG(
    dag_id = "interval",
    start_date = dt.datetime(2019,1,1),
    end_date = dt.datetime(2019,1,5),
)

cron 설정

  • cron job 설정 방법
*    *    *    *    *   
|    |    |    |    |   
|    |    |    |    |   
|    |    |    |    |
|    |    |    | Day of week(0-6 | Sun-Sat)
|    |    |    |
|    |    |  Month(1-12)
|    |    |
|    |  Day of Month(1-31)
|    |
|   Hour(0-23)
|
Min(0-59)

[참조] cronitor - cron job

  • Airflow DAG 설정
dag = DAG(
    dag_id = "cron_job",
	schedule_interval="* * * * *",
)

매크로 방식

  • Airflow의 매크로를 사용
프리챗 이름의미
@once1회만 실행
@hourly매시간 변경시 1회 실행
@daily매일 자정에 1회 실행
@weekly매주 일요일 자정에 1회 실행
@monthly매월 1일 자정에 1회 실행
@yearly매년 1월 1일 자정에 1회 실행
  • Airflow 매크로 입력
dag = DAG(
    dag_id = "macro",
	schedule_interval="@daily",
)

빈도 설정

  • timedelta로 빈도 설정
import datetime as dt

dag = DAG(
    dag_id = "macro",
	schedule_interval=dt.timedelta(days=3), # 3일 간격으로 실행
)
profile
데이터 엔지니어링이 너무너무 좋아요

0개의 댓글