IT 삽질기

Airflow execution_date 이해하기 본문

BigData/Airflow

Airflow execution_date 이해하기

화이팅빌런 2021. 9. 30. 22:49

이번 글에서는 Airflow의 execution_date에 대해서 이해해보도록 하자.

execution_date에 대한 설명을 하기에 앞서 Airflow는 batch schedulering을 위한 tool이라는 것을 기억하자.

execution_date란 ?

먼저 execution_date에 대한 정의를 내려보자.

airflow에서의 execution_date는 dag가 실행되어야 하는 기대값이라고 생각할 수 있을 것 같다.

한 가지 예를 들어 살펴보자. 매일 자정 전날에 발생했던 log들을 HDFS로 이관하는 작업이 있다고 가정해보자. 자정이 지나 오늘의 날짜는 2021-09-26일인데 이관되어야 하는 log들의 날짜는 2021-09-25일이 된다. 이런 경우 사용자는 하루 전 날짜의 데이터를 가지고 오기 위해 어떻게 해야할까? 단순하게 오늘 날짜-1을 하여 데이터를 가지고 오면 되는데 airflow는 이를 execution_date라는 것으로 대신 사용할 수 있게 해준다. 실행되는 날짜는 2021-09-26이지만 execution_date는 2021-09-25가 된다.

실제 예를 살펴보도록 하자. 아래의 예는 daily job으로 start date와 execution date를 잘 살펴보면 오늘의 날짜는 분명 26일인데 execution_date는 25일까지밖에 없는 것을 확인할 수 있다. execution_date가 26일인 작업은 27일 자정에 실행되게 된다.

다른 예시도 함께 살펴보도록 하자. hourly job과 5분마다 실행되는 dag들의 실행 이력은 아래와 같다.

hourly job의 경우 현재 시간은 14시인데 execution_date는 13시까지 밖에 존재하지 않고 이 역시 위의 예와 동일한 예를 들어 설명하면 13시 log 데이터를 모두 이관하기 위해서는 14시에 작업이 실행되어야하는데 그 때의 execution_date는 13시가 되는 것이다.

마지막으로 주기가 5분인 작업은 어떻게 동작하게 될까? 이 작업의 경우 실무에서는 거의 사용할 일이 없겠지만 예제를 통해 살펴본다고 이해하면 될 것 같다. 위의 2개의 동작방식과 마찬가지로 start date와 execution_date사이에 동일한 방식으로 차이가 발생하는 것을 확인할 수 있다.

정리

이번 글에서는 execution_date에 대한 내용을 정리해보았다.

execution_date에 대해 처음 이해할 때 어려움을 겪었고, 왜 이렇게 동작하는지에 대한 고민도 많이 했지만 잘 이해하고 사용한다면 매우 편리하게 사용할 수 있는 기능 중 하나라는 생각이 든다.

본 글에서는 scheduler_interval에 대해 많은 내용을 다루지는 못했지만 아래의 참고자료에 있는 글에서는 특정 요일에만 실행되는 dag에 대한 경우 execution_date가 어떻게 변화하는지에 대한 내용까지 잘 설명하고 있으므로 보다 자세한 해당 글도 함께 참고하기 바란다.

 

내용에 잘못된 내용이 있을 수 있으며, 잘못된 내용이나 문의사항에 대해서는 댓글로 남겨주시면 답변 드리도록 하겠습니다.

 

example_dags

https://github.com/dydwnsekd/airflow_example/blob/main/dags/execution_date_daily.py

https://github.com/dydwnsekd/airflow_example/blob/main/dags/execution_date_hourly.py

https://github.com/dydwnsekd/airflow_example/blob/main/dags/execution_date_5min.py

 

참고자료

https://towardsdatascience.com/airflow-schedule-interval-101-bbdda31cc463

'BigData > Airflow' 카테고리의 다른 글

Airflow Xcom 사용하기  (0) 2021.09.24
Airflow Example DAG 제거하기  (0) 2021.09.19
Airflow SlackOperator 사용하기  (0) 2021.09.16
Airflow 서비스 등록하기  (0) 2021.09.04
Airflow Local Executor와 Celery Executor  (0) 2021.08.20
Comments