Apache Airflow

[Airflow] backfill - 스케쥴 시점이 지나간 DAG 실행하기

비번변경 2022. 11. 14. 17:28

개요

여기 이미 생성되어 있는 DAG가 있다.

DAG

DAG on 시 처리되는 시점은 2022-11-01인데, 이보다 전의 시점, 2022-10-02 시점부터의 데이터를 처리하고 싶다.

 

DAG 생성 시 전달할 수 있는 매개변수인 start_date, end_date, catchup 설정을 사용해서 처리할 수 없는 상황이라면 어떻게 해야할까?

 

 

Backfill

지정된 시간 범위 동안 스케쥴링되는 모든 DAG를 실행하는 명령어이다.

airflow backfill

단어 의미 그대로 데이터를 채우는 작업으로, 과거 시점의 공백을 메우기 위해 사용한다. catchup이 비활성화된 상태에도 실행할 수 있다.

airflow dags backfill \
    --start-date START_DATE \
    --end-date END_DATE \
    dag_id
    
# 예시
airflow dags backfill \
    --start-date 2022-10-02T14:00:00 \
    --end-date 2022-10-05 \
    test_dag

 

옵션

  • --continue-on-failures : 몇몇 Task가 실패하더라도 Backfill 자체는 실패하지 않고 계속 진행되도록 한다. (ver 2.3 이상 지원)
  • —delay-on-limit DELAY_ON_LIMIT : DagRun 재수행 시 max_active_runs 값에 막혀 실행되지 못한 경우, 재수행까지의 대기 시간을 설정한다.
  • -e END_DATE, --end-date END_DATE : backfill 하는 마지막 DagRun의 data_interval 시작 시각을 지정한다. YYYY-MM-DD, YYYY-MM-DDTHH:mm:SS, YYYY-MM-DDTHH:mm:SS+mm:SS(Timezone)로 지정한다.
  • -l, --local : backfill 작업을 LocalExecutor에서 수행한다.다른 Executor가 아닌 현재 Backfill 작업을 시작한 위치에서 작업한다.
  • -m, --mark-success : 실제로 backfill 작업을 수행하는 대신, 모든 Task를 SUCCESS 상태로 일괄 업데이트한다.
  • --pool POOL : backfill Task가 실행될 pool을 지정한다.
  • --rerun-failed-tasks : 작업중에 실패한 Task 발생 시, Exception을 던지지 않고 재수행한다.
  • --reset-dagruns : DagRun을 초기화한다.
  • -B, --run-backwards : 가장 최근의 Data_Interval 부터 실행되며 END_DATE부터 START_DATE 순으로 실행된다.
  • -s START_DATE, --start-date START_DATE : backifll하려는 시작 DagRun의 data_interval 시작 시각을 의미한다.
  • -t TASK_REGEX, --task-regex TASK_REGEX : DAG 내의 특정 Task만 backfill한다.

 

 

Backfill 시 주의점

1. Web UI에서 지원되지 않는다. 현재는 CLI를 통해서만 지원된다.

 

2. backfill로 처리된 DagRun은 WebUI Clear를 이용한 트리거가 불가능하다.

Airflow는 backfill을 포함해 수동으로 생성된 DagRun은 스케쥴 큐에 추가하기 않기 때문이다. backfill로 처리된 것에 대해서는 Cli를 이용해 clear 후 backfill해야 한다.

또는 --reset-rerun 옵션을 주어서 backfill해야 한다.

airflow dags backfill \
    --start-date 2022-10-13T07:00:00 \
    --reset-dagrun \
    test_dag

 

3. schedule_interval이 설정된 DAG만 실행할 수 있다.

 

 

참고 문서

https://airflow.apache.org/docs/apache-airflow/stable/dag-run.html#backfill

https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#backfill

https://medium.com/nerd-for-tech/airflow-catchup-backfill-demystified-355def1b6f92

Apache Airflow 재수행 방법 정리

https://wookiist.dev/175

https://stackoverflow.com/questions/55725626/airflow-cleared-backfill-tasks-do-not-get-picked-by-the-scheduler

728x90