Apache Airflow

[Airflow] 스케쥴링

비번변경 2022. 8. 15. 23:31

개요

Airflow Scheduler는 일정한 주기마다 DAG 정의 파일이 저장된 폴더 내의 파이썬 파일을 탐색하며, 각 파일에 정의된 DAG 인스턴스의 스케쥴 설정에 맞춰서 Dagrun이라는 인스턴스를 생성하는 방식으로 작동한다.

이 때 스케쥴링 설정을 위해 DAG 인스턴스 생성 시의 매개변수로 start_date와 schedule_interval(실행 주기)을 전달하는데, 이 글에서는 start_date에 대해 간단히 정리한다.

 

 

배치 데이터 처리 방식

전통적인 배치 데이터 처리 방식은 작업의 대상이 되는 데이터의 기간이 존재하며, 해당 기간이 지난 후에 기간에 발생한 데이터를 처리한다.

 

Airflow에서는 작업의 대상이 되는 데이터의 기간이 schedule_interval에 해당한다.

가령 매일 0시 0분에 실행되는 DAG라면, 

DAG(
    dag_id='test_dag',
    schedule_interval='0 0 * * *',
    start_date=datetime.datetime(2021, 1, 1)
)

작업의 대상이 되는 기간은 아래와 같다.

  • 2021/01/01 00:00:00 ~ 2021/01/01 23:59:59
  • 2021/01/02 00:00:00 ~ 2021/01/02 23:59:59
  • 2021/01/03 00:00:00 ~ 2021/01/03 23:59:59
  • ... 생략

 

 

start_date

airflow에서 start_date는 DAG가 실행되는 기준 시점에 해당한다. 실제로 실행을 시작하는 시점이 아니다.

가령 아래의 DAG의 start_date는 2021년 1월 1일이다.

DAG(
    dag_id='test_dag',
    schedule_interval='0 0 * * *',
    start_date=datetime.datetime(2021, 1, 1)
)

이 DAG는 매일 0시 0분에 실행되므로 2021/01/01 00:00:00 ~ 2021/01/01 23:59:59 동안의 데이터를 기준으로 하여 시작한다. 즉, 처음 DAG가 실행되는 시점은 2021/01/01 00:00:00이 될 수 없다. 하루 치의 데이터가 준비되어 있지 않기 때문이다. 실제 실행 시작 시점은 2021/01/02 00:00:00이 된다.

 

start_date / 실제 실행 시각

 

만약 2021년 1월 4일에 start_date가 2021-01-01인 DAG를 생성하여 ON했다면 2021-01-01, 2021-01-02, 2021-01-03에 해당하는 스케쥴이 트리거되어 실행된다.

 

 

+ 또한 Task Instances의 관점에서 Start Date는 각 Task가 실제로 실행된 시각을 의미하기도 한다.

task start date

 

 

참고 문서

Airflow에서 자주하는 실수들

https://blog.bsk.im/2021/03/21/apache-airflow-aip-39/

https://it-sunny-333.tistory.com/157?category=458977 

728x90