Airflow 오버뷰
해당 글은 Airflow 공식문서 중 Overview 내용을 번역하여 공부한 내용입니다.
오역이나 잘못된 내용이 있을 경우 댓글 부탁드리겠습니다.

Airflow란?

Airflow란 Workflow를 빌드하고, 실행하는 것을 도와주는 플랫폼이다.

최근 ETL 파이프라인을 만드는 데 가장 핫한 프레임워크라고 할 수 있다.

Airbnb에서 시작되어 아파치 오픈소스 프로젝트로 관리되고 있다.

 

Workflow는 DAG로 표현되며, DAG는 종속성과 데이터의 흐름을 고려하여 정렬된 일련의 Task라는 개별 작업들로 구성된다.

위 그림과 같이 DAG는 여러 Task들로 구성된다.

Task 간의 종속성과, 작업 실행/재실행 순서 및 분기 처리까지 지정할 수 있다.


Airflow 아키텍처

Airflow 설치 시 일반적으로 아래 5가지의 컴포넌트들을 포함하게 된다.

  1. Scheduler
  2. Executor
  3. Webserver
  4. DAG Directory
  5. Metadata Database

 

Scheduler

  • 스케쥴링된 workflow를 처리하고, 실행한다.
  • 실행할 수 있는 Task를 Executor에게 전달한다.

Executor

  • Task들을 처리한다.
  • 기본 Airflow 설치에서는 그림에서와 같이 Scheduler 내부에서 처리되나, 일반적인 프로덕션 배포 환경에서는 executor들은 보통 worker들로 task를 푸시합니다.

Webserver

  • DAG들과 Task들의 상태를 디버깅하거나, 실행할 수 있게끔 도와주는 UI를 제공합니다.
  • Flask로 구현되어있습니다.

DAG Directory

  • DAG 파일들이 위치하게 되는 폴더
  • Scheduler와 Executor들이 이 디렉토리를 읽어 DAG를 사용합니다.

Metadata database

  • 스케쥴러에 의해 사용되는 메타데이터 데이터베이스
  • Executor와 웹서버의 상태를 저장한다.

Airflow에서의 워크로드들

DAG는 Task들의 집합으로서, 방향이 있는 비순환 그래프로 표현이 된다. 아래 3가지 정도의 Task들을 공통적으로 자주 보게 된다.

 

  • Operators
    • DAG를 빠르게 구축할 수 있도록 사전에 정의된 Task이다.
  • Sensors
    • Operator들의 특수한 서브 클래스로, 외부 이벤트가 발생하는 것을 기다리는 기능을 한다.
  • TaskFlow - @task
    • Task로서, 사용자에 의해 커스텀하게 패키징 된 python 함수이다.

내부적으로, 위 3가지는 Airflow의 BaseOperator의 서브클래스로서, Task와 Operator의 개념은 상호 교환이 가능하지만 별도의 개념으로 생각하는 것이 좋다.
Operator와 Sensor는 템플릿으로서, DAG 파일에서 호출하게 되면 Task를 만들게 된다.


Airflow에서의 작업 Flow 제어

DAG는 여러 번 실행하고, 병렬적으로 여러 개를 실행할 수 있도록 디자인되었다.
DAG는 실행되는 간격에 대한 매개변수를 항상 포함하고 있으며, 다른 선택적인 매개변수도 포함할 수 있다.

Task들은 각각 종속성을 가진다. >> 나 <<와 같은 연산자를 볼 수 있다.

 

예를 들어, 아래와 같이 Task들을 정의했다면

t1 >> [t2, t3] >> t4

t1 종료 후 t2, t3가 실행되며 t2, t3가 종료되면 t4를 수행하게 된다.

매우 직관적으로 플로우를 표현할 수 있다.