MLOps/Airflow

[Airflow] Sensor에 대해 알아보자

monkeykim 2024. 11. 19. 00:07

Sensor Operator란?

Sensor Operator는 특정 조건이 충족될 때까지 대기하는 Task로, 조건이 만족되면 True를 반환하여 다음 Task로 넘어갑니다. 모든 Sensor는 BaseSensorOperator를 상속하여 구현되며, 반드시 두 가지 메서드를 오버라이딩해야 합니다:

  1. __init__(): 초기화 메서드로, Sensor의 기본 설정을 정의합니다.
  2. poke(context): 센싱 로직을 정의하는 메서드로, 특정 조건을 만족하는지 확인합니다.

BaseSensorOperator는 Airflow의 BaseOperator를 상속하며, Sensor의 동작과 모드를 결정하는 다양한 매개변수를 제공합니다.

Airflow docs: https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/sensors/base/index.html

 

airflow.sensors.base — Airflow Documentation

 

airflow.apache.org


Sensor의 주요 매개변수

  • poke_interval: 조건 충족 여부를 주기적으로 확인하는 시간 간격(초 단위).
  • timeout: 센싱 대기 시간의 최대값(기본적으로 24시간).
  • soft_fail: 센싱 실패 시 Task를 실패로 처리하지 않고 스킵 상태로 변경.
  • mode: poke와 reschedule 두 가지 모드 중 하나를 선택.

Mode 유형

Sensor Operator는 두 가지 동작 모드를 제공합니다. 사용 시점에 따라 워크플로우 성능에 큰 영향을 미칠 수 있으므로, 모드를 신중히 선택해야 합니다.

1. Poke Mode

  • 특징:
    • Task가 Running slot을 점유하며, 일정 시간마다 조건을 체크.
    • 상태가 running으로 유지.
  • 적합한 상황:
    • 센싱 간격이 짧을 경우(초 단위).
    • 빠르게 완료되거나 반복적인 조건 확인이 필요한 Task.
  • 장점:
    • 간단한 작업 흐름.
    • 적은 스케줄러 부하.
  • 단점:
    • 센서가 대기하는 동안 Slot을 점유하므로 리소스 소모가 크다.

2. Reschedule Mode

  • 특징:
    • 센서가 동작하는 순간에만 Slot을 점유.
    • 상태가 up_for_reschedule로 유지.
  • 적합한 상황:
    • 센싱 간격이 긴 경우(분 단위 이상).
    • 리소스 절약이 필요한 대규모 워크플로우.
  • 장점:
    • 센싱 간격 사이에 Slot을 비워둬 리소스 관리 효율이 높음.
  • 단점:
    • 스케줄러 부하 발생 가능.

Slot과 Pool 이해하기

Airflow에서 Task는 실행될 때 Slot을 점유합니다. 기본적으로 모든 Task는 default_pool에서 실행되며, 사용자는 Pool을 정의하여 Slot 수를 관리할 수 있습니다.

  • Slot: Task 실행 시 점유하는 자원.
  • Pool: Slot을 그룹화하여 특정 자원을 Task 그룹에 할당.

모드 선택의 중요성

Airflow 워크플로우가 안정적으로 동작하려면 Sensor의 모드 선택이 중요합니다. Sensor Task가 장시간 동안 Slot을 점유하면 다른 Task가 실행되지 못하는 문제가 발생할 수 있습니다. 특히 다음과 같은 점을 고려해야 합니다:

  • 짧은 센싱 간격: poke 모드로 간단히 처리.
  • 긴 센싱 간격: reschedule 모드로 리소스 낭비 최소화.
  • 대규모 워크플로우: 센서 Task가 많은 경우, reschedule 모드로 전환하여 스케줄러 부담을 줄이는 것이 중요.

Sensor 활용 시 주의사항

  1. 리소스 관리: 센서 Task의 모드와 Pool 설정을 통해 Slot 점유를 효율적으로 관리합니다.
  2. 대기 시간 설정: timeout 값을 합리적으로 설정하여 무한 대기를 방지합니다.
  3. 스케줄러 부담 완화: 대규모 워크플로우에서는 reschedule 모드를 사용하여 스케줄러의 부하를 줄입니다.