MLOps/Airflow

[Airflow] default_args 알아보기

monkeykim 2024. 12. 4. 23:47

default_args란 무엇인가?

default_args는 DAG 하위의 모든 오퍼레이터에 공통으로 적용할 파라미터를 정의하는 데 사용됩니다. 이 파라미터는 반복적으로 동일한 값을 작성해야 하는 번거로움을 줄여주고, 코드의 일관성을 유지하는 데 기여합니다.


default_args에 어떤 파라미터를 설정할 수 있을까?

default_args에 설정할 수 있는 파라미터는 Airflow의 BaseOperator 클래스 생성자에서 제공하는 파라미터들입니다.
예를 들어, 다음과 같은 파라미터들이 대표적입니다:

  • start_date
  • end_date
  • retries
  • retry_delay
  • on_failure_callback
  • on_success_callback
  • 기타 BaseOperator에서 제공되는 다양한 파라미터들

Airflow Base operator docs

DAG 파라미터 vs BaseOperator 파라미터

Airflow에서는 DAG 파라미터BaseOperator 파라미터가 존재하며, 두 파라미터의 역할과 적용 수준이 다릅니다.

공통 파라미터의 충돌 예시

두 클래스에서 동일한 이름의 파라미터를 제공하는 경우가 있습니다. 예를 들어:

  • on_failure_callback
    • DAG 파라미터: DAG 전체 수준에서 실패 시 호출할 콜백 함수 정의
    • BaseOperator 파라미터: 개별 Task 수준에서 실패 시 호출할 콜백 함수 정의

이 경우, 같은 이름의 파라미터라고 해도 적용 범위가 다르므로, 사용 목적에 맞게 설정해야 합니다.
DAG 파라미터는 default_args에 포함시키지 말아야 합니다.


우선순위: default_args vs 개별 오퍼레이터 설정

default_args를 통해 전달된 파라미터는 기본값으로 작동합니다. 하지만, 개별 오퍼레이터에 동일한 파라미터가 명시된 경우, 해당 오퍼레이터의 설정이 default_args보다 우선합니다.

예시

default_args = {
    'start_date': datetime(2023, 12, 1),
    'retries': 3,
}

with DAG(
    'example_dag',
    default_args=default_args,
    schedule_interval='@daily',
) as dag:

    task1 = BashOperator(
        task_id='print_date',
        bash_command='date',
        retries=5,  # default_args의 'retries'보다 우선
    )

위 코드에서:

  • task1의 retries는 5로 설정됩니다. 이는 default_args에 명시된 retries=3보다 우선하기 때문입니다.

정리: DAG 파라미터와 BaseOperator 파라미터의 차이

  • DAG 파라미터
    • DAG 단위로 적용됩니다.
    • 개별 Task에는 영향을 미치지 않습니다.
    • 예: schedule_interval, catchup, on_failure_callback(DAG 수준)
    • default_args에 포함시키지 말아야 합니다.
  • BaseOperator 파라미터
    • Task 단위로 적용됩니다.
    • 개별 Task마다 설정 가능하지만, 공통 적용이 필요하면 default_args로 설정할 수 있습니다.
    • 예: start_date, retries, retry_delay, on_failure_callback(Task 수준)