본문 바로가기

Data Mining & Distributed/Airflow

[ Airflow ] schedule - 스케쥴러 시간 설정하기

반응형

Apache Airflow에서 스케줄러의 시간 설정은 주로 DAG의 schedule_interval 속성을 통해 이루어지며, 이를 통해 워크플로가 언제 실행될지 제어합니다. 시간 설정에 사용되는 주요 규칙은 다음과 같습니다:


1. schedule_interval 설정 형식

schedule_interval은 DAG 실행 주기를 정의하며, 다양한 형식을 지원합니다.

a) 크론 표현식 (Cron Expression)

  • * * * * * 형식의 문자열로 주기적 실행을 정의.
  • 각 필드는 다음과 같이 해석됩니다:
    • 분 (minute): 0–59
    • 시간 (hour): 0–23
    • 일 (day of month): 1–31
    • 월 (month): 1–12
    • 요일 (day of week): 0–7 (0과 7은 일요일)
  • 예:
    • "0 9 * * *": 매일 오전 9시에 실행.
    • "0 9 * * 1": 매주 월요일 오전 9시에 실행.

b) 간단한 문자열 간격

  • @로 시작하는 예약된 간격:
    • @once: DAG이 한번만 실행됨.
    • @hourly: 매시간 실행.
    • @daily: 매일 자정(00:00)에 실행.
    • @weekly: 매주 자정(00:00)에 실행.
    • @monthly: 매월 1일 자정(00:00)에 실행.
    • @yearly 또는 @annually: 매년 1월 1일 자정(00:00)에 실행.

c) timedelta 객체

  • Python의 datetime.timedelta를 사용해 실행 간격을 정의.
  • 예: timedelta(days=1): 매일 실행.

2. DAG 실행 시간 (Execution Date)의 이해

Airflow는 백필링(Backfilling) 개념을 사용하며, DAG의 execution_date는 실제 실행 시간이 아니라 데이터를 처리하려는 기준 시간을 나타냅니다.

  • 예:
    • schedule_interval="0 9 * * *"로 설정된 DAG은 2024-12-01 09:00에 실행되지만, 이 DAG의 execution_date2024-11-30 09:00을 기준으로 처리합니다.
    • 실행 시작 시간start_date에 의해 영향을 받습니다.

3. Timezone 설정

Airflow는 기본적으로 UTC를 사용하며, DAG 및 스케줄 시간은 이를 기반으로 동작합니다.

  • 타임존을 변경하려면:
    1. Airflow 설정 파일 airflow.cfg에서 default_timezone 값을 변경:
     [core]
     default_timezone = Asia/Seoul
  1. DAG 레벨에서 timezone을 설정:
     from pendulum import timezone
     local_tz = timezone("Asia/Seoul")

     with DAG(
         dag_id="example_dag",
         default_args=default_args,
         schedule_interval="0 9 * * *",
         start_date=datetime(2024, 1, 1, tzinfo=local_tz),
         tags=["example"],
     ) as dag:
         ...

4. 스케줄 실행 시 주의사항

  • start_dateschedule_interval에 따라 DAG이 실행되는 시간에 차이가 있을 수 있으니 설정 시 주의해야 합니다.
  • catchup 옵션:
    • 기본값은 True이며, start_date 이후 실행되지 않은 간격을 모두 실행.
    • 이를 방지하려면:
    catchup=False

요약

Airflow 스케줄 시간 설정은 크론 표현식, 예약된 문자열 간격, 또는 timedelta를 활용할 수 있습니다. 시간대를 고려하여 정확한 스케줄 설정과 실행 시간의 개념을 이해하면 효율적인 DAG 관리를 할 수 있습니다.

반응형