[Airflow] TASK
task의 종류 3가지
Operator(작업자), Sensors(이벤트감지), TaskFlow-decorated(custom python function)
Relationships
# 방법1
second_task >> [third_task, fourth_task]
# 방법2
first_task.set_downstream(second_task)
third_task.set_upstream(second_task)
- 태스크에서 태스크간 정보를 전달하는 데에는 Xcom을 사용함.
Task Instances
- task states의 종류는 이미지 참조. (보통 none -> scheduled -> queued -> running -> success )
- task states는 xcom을 통해 다음 method로도 넘어감
Relationship Terminology
- upstream and downstream
Timeouts
- operator: execution_timeout (datetime.timedelta) => AirflowTaskTimeout
- sensor : timeout => reschedule => AirflowSensorTimeout
- vs SLAs: timeout은 시간이 초과되면 에러가 되고, SLA는 시간이 초과되면 알람이 오고, task가 그대로 진행된다 ( 단순 연장)
SLAs
- SLA Misses 가 발생하는 경우 이메일로 알람 발송
- sla 파라미터로 datetime.timedelta를 입력, => 이메일 발송,
- sla_miss_callback을 통한 custom도 가능
- 수동 trigger는 sla miss를 허용하지 않음
sla_miss_callback
- 파라미터 : dag, task_list, blocking_task_list, slas, blocking_tis 을 인자로 받는 함수를 만들어 넘길 수 있다.
Special Exceptions
아래 exception들을 추가하면 기존 job에서 특정 조건에 대해 빠르게 에러 처리를 진행할 수 있음.
- AirflowSkipException: 현재 task를 skipped로 설정
- AirflowFailException: 현재를 실패로 표현하고 이후 task들을 실행하지 않음.
Zombie/Undead Tasks
airflow가 task의 상태를 감지하는 방식
- Zombie tasks: 비활성 상태임에도 불구하고 실행 중인 상태로 멈춰 있는 작업 인스턴스
- 주로 worker의 oom, 재시작, scale 변경
- Undead tasks: 실행되면 안되는데 실행되는 task
출처: