Airflow
Airflow
는 작업흐름(workflow)을 빌드하고 실행할 수 있도록 해주는 플랫폼이다.
작업흐름은 DAG(Directed Acyclic Graph)
으로 표현되며 태스크(Task
) 라고 불리는 개별 작업들의 집합으로 이루어진다. 이들 태스크들은 의존성과 데이터흐름을 고려하여 작업흐름 내에서 배열된다.
아키텍쳐
Airflow 아키텍쳐 구성요소들은 다음과 같다.
- 스케줄러 (Scheduler) - 예약된 작업흐름을 시작하고, 태스크들을 Executor에 전달하여 실행시킨다.
- 실행자 (Executor) - 실행중인 태스크들은 한다. 태스크 실행을 Worker(일꾼)에 넘겨준
- 웹서버 - 작업흐름을 감시하고 DAG과 태스크들을 실행 및 필요시 디버깅할 수 있는 UI를 제공
- DAG 디렉토리 - DAG을 구현한 파일들이 저장되며 스케쥴러와 실행자가 DAG을 읽기 위해 접근하는 공간
- 메타데이터 DB - 상태관리를 위한 데이터베이스
작업부하 (Workloads)
DAG은 일련의 태스크들을 실행시키는데 3가지 형태의 작업 부하가 있다.
- Operator - 미리정의된 태스크들. BaseOperator의 서브클래스들
- Sensor - 대부분을 외부이벤트가 발생하기를 기다리는 특별한 Operator
- TaskFlow-decorated @task - 파이썬 함수로 이루어진 태스크. 이전 버전(1.10.x)의 PythonOperator에 해당
Operator와 Sensor는 템플릿에 가깝고 DAG 안에서 태스크로 실체화된다.
제어 흐름 (Control Flow)
DAG은 반복적으로 또한 병렬적으로 실행될 수 있도록 설계되었다. DAG은 실행되는 데이터 구간(data interval
)을 포함하여 추가적인 파라미터를 가질 수 있다.
first_task >> [second_task, third_task]
third_task << fourth_task
first_task.set_downstream([second_task, third_task])
third_task.set_upstream(fourth_task)
이러한 의존성은 그래프의 정점(edges)을 구성하여, Airflow가 어떤 순서로 태스크들을 수행시킬지를 고안하도록 만든다.
추가로, 태스크간 데이터 전달을 위해서는 두 가지의 선택지가 있다.
- XComs(Cross-Communications) - 태스크들이 주로 작은 메타데이터를 주고 받는 경우
- 저장장치에 대용량의 파일들을 업로드 / 다운로드
기타 기능들
- SubDAGs - 재사용가능한 DAG으로 다른 DAG에 임베딩될 수 있다.
- TaskGroups - UI에서 시각적으로 태스크들을 그룹으로 묶을 수 있다.
- Connections & Hooks
- Pools
- ...
참고자료