[Airflow] 01. Architecture Overview

Jay Park·2021년 11월 22일
0

Airflow

Airflow는 작업흐름(workflow)을 빌드하고 실행할 수 있도록 해주는 플랫폼이다.
작업흐름은 DAG(Directed Acyclic Graph)으로 표현되며 태스크(Task) 라고 불리는 개별 작업들의 집합으로 이루어진다. 이들 태스크들은 의존성과 데이터흐름을 고려하여 작업흐름 내에서 배열된다.

아키텍쳐

Airflow 아키텍쳐 구성요소들은 다음과 같다.

Airflow Architecture

  • 스케줄러 (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개의 댓글