[Airflow] 01. Architecture Overview

Jay Park·2021년 11월 22일
0

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
  • ...

참고자료

profile
Jaytiger

0개의 댓글