Apache Airflow

[Airflow] Clear - Task 재실행

비번변경 2022. 11. 15. 23:01

Clear

스케쥴링되어 실행된 DAG의 Task가 실패하거나 데이터 재처리 등의 이유로 DAG의 모든 Task 또는 일부 Task를 다시 처리하는 경우가 자주 있다. 이 경우 Task가 실행된 Task instance를 지움으로써, 문자 그대로 Clear 하여 Task를 다시 실행할 수 있다.

 

clear를 통해 Task instance를 삭제하면 max_tries를 0으로 업데이트하고 현재 Task instance 상태를 None으로 설정하기 때문에 Task가 다시 실행된다. Task instance를 삭제해도 기록은 삭제되지 않는다. 

 

 

Web UI Clear

특정 Task Clear

Clear할 Task instance를 선택한 후, Task Actions > Clear를 클릭한다.

특정 Task Clear

Clear 시 사용할 수 있는 Option은 다음과 같다.

  • Past: 해당 task 이전에 실행된 모든 task instance도 포함하여 삭제
  • Future: 해당 task 이전에 실행된 모든 task instance도 포함하여 삭제
  • Upstream: 해당 task의 상위 의존 task instance도 포함하여 삭제
  • Downstream: 해당 task의 하위 의존 task instance도 포함하여 삭제
  • Recursive: 부모/자식 DAG 내 모든 task intance도 포함하여 삭제
  • Failed : 실패한 task instance만 삭제

Clear를 클릭하면 지워질 Task intance 정보가 표시되고 확인을 요청한다.

clear할 task intance 확인

 

전체 Task Clear

DagRun의 모든 Task instance를 clear 할 때는 dag Tree에서 맨 위의 동그라미를 클릭한 후, Clear 버튼을 클릭한다.

전체 Task Clear

 

 

CLI

Web UI를 사용하면 간편하지만, 일일이 클릭해주어야 하므로 재처리할 Task가 많은 경우 CLI를 사용하는 게 좋을 수도 있다.

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

옵션

  • -R, --dag-regex : 정확한 dag_id 대신 정규표현식으로 dag_id를 찾는다.
  • -d, --downstream : Clear 하는 Tasks를 의존하는 Tasks를 포함해 clear 한다.
  • -e, --end-date END_DATE : Clear 하는 마지막 DagRun의 data_interval 시작 시각을 지정한다. YYYY-MM-DD, YYYY-MM-DDTHH:mm:SS, YYYY-MM-DDTHH:mm:SS+mm:SS(Timezone)로 지정한다.
  • -X, --exclude-parentdag : Clear 하는 Task의 부모 DAG는 Clear 하지 않는다.
  • -x, --exclude-subdags : Clear 하는 Task의 SubDAG는 Clear 하지 않는다.
  • -f, --only-failed : FAILED 상태인 Task만 Clear 한다.
  • -r, --only-running : RUNNING 상태인 Task만 Clear 한다
  • -s, --start-date START_DATE : Clear 하는 처음 DagRun의 data_interval 시작 시각을 지정한다. YYYY-MM-DD, YYYY-MM-DDTHH:mm:SS, YYYY-MM-DDTHH:mm:SS+mm:SS(Timezone)로 지정한다.
  • -S, --subdir SUBDIR : DAG 파일이 위치한 경로를 지정한다. 기본적으로 [AIRFLOW_HOME]/dags을 참조한다.
  • -t, --task-regex TASK_REGEX : 지정한 Task만 Clear 한다.
  • -u, --upstream : Clear 하는 Tasks가 의존하는 Tasks를 포함해 clear 한다.

 

--start-date 지정 후 --end-date를 지정하지 않으면 --start-date 이후의 모든 Task instance를 Clear 한다.

--task-regex를 지정하지 않으면 모든 Task instance를 Clear 한다.

 

 

참고 문서

https://docs.astronomer.io/learn/rerunning-dags

Airflow 재수행 하기

https://1minute-before6pm.tistory.com/31

https://wookiist.dev/175

Apache Airflow 재수행 방법 정리