Big Data

Apache Airflow란?

개발기록자 2023. 7. 20.

Apache Airflow

apache airflow
https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+logos

데이터 파이프라인을 효율적으로 관리하는 것은 기업과 조직에 있어 중요한 문제이며 이러한 문제를 해결하기 위해 Airflow라는 오픈 소스 플랫폼이 개발되었습니다. Airflow는 작업 스케줄링, 워크플로우 관리, 모니터링 등 다양한 기능을 제공하고 있습니다. 이번 글에서는 Airflow에 대해 알아보겠습니다.


Apache Airflow란?

Apache Airflow는 AirBnB(에어비앤비)에서 Python기반으로 개발한 Workflow Management Tool입니다. Workflow를 관리하기 위한 오픈 소스 플랫폼으로 워크플로우 스케줄링, 모니터링 등 다양한 기능을 제공합니다. 에어플로우를 이용해서 크고 복잡한 데이터 파이프라인을 관리 및 개발할 수 있습니다.


 Airflow 특징

- 파이썬 언어를 사용

- 작업을 코드로 정의하기 때문에 복잡한 커스텀 파이프라인 구현 가능

- 웹 UI가 존재하며, 이를 이용하여 워크플로우 실행, 로그 등 작업 가능

- 스케일 아웃이 가능


Airflow 구성요소

Airflow 구성요소
https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/overview.html

Webserver : 웹 서버는 사용자가 DAG를 관리하고 모니터링할 수 있는 웹 기반 인터페이스를 제공합니다. 사용자는 웹 서버를 통해 DAG 실행, 로그 등을 관리할 수 있습니다.

 

Scheduler : 에어플로우에서 정의된 DAG를 기반으로 작업(Task)을 스케줄링과 실행을 관리하는 역할을 합니다. 스케줄에 따라 DAG를 실행하고, 작업의 의존성을 고려하여 실행 순서를 계획합니다.

 

Executor : 작업을 실행하는 역할을 수행하며, LocalExecutor, CeleryExecutor 등 다양한 Executor유형을 제공합니다.

 

Worker : Executor에서 할당된 작업을 가져와 실행하는 역할을 합니다.

 

Dag(Directed Acyclic Graph) : DAG는 비순환 구조의 그래프입니다. 노드와 노드가 단방향으로 연결되어 있어 한 쪽 방향으로만 갈 수 있고, 순환하지 않는다는 특징을 가지고 있습니다. DAG는 작업의 흐름과 의존 관계를 표현합니다.


Executor 종류

Executor는 크게 2가지로 Worker가 동일한 서버 내에 존재하는 Local Executor와 분산환경에 존재하는 Remote Executor가 존재합니다.

 

Sequential Executor

Airflow에서 제공하는 기본 Executor로 한 번에 하나의 작업만 수행할 수 있습니다.

 

Local Executor

Sequential Executor과 다르게 작업을 병렬로 처리할 수 있습니다. 옵션 값(parallelism)을 통해 설정할 수 있으며, 0으로 설정하는 경우 무제한으로 병렬처리할 수 있습니다.

 

Celery Executor

Celery Executor
https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/celery.html

Celery Executor 또한 작업을 병렬 처리할 수 있으며, Redis나 RabbitMQ 같은 Celery가 필요합니다. 작업을 메시지 브로커에 전달하고, Celery Worker가 작업을 가져가서 실행하는 방식을 가집니다. Worker 수를 스케일 아웃할 수 있지만, 메시지 브로커를 따로 관리해야 하고, 워커 프로세스에 대한 모니터링이 필요합니다.

 

Kubernetes Executor

kubernetes Executor
https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/kubernetes.html

컨테이너 환경에서 Worker가 실행되는 방식으로, 필요할 때만 쿠버네티스 자원을 사용합니다. 스케줄러가 실행 상태로 변경되면 Kubernetes API를 호출하여 Airflow 워커를 pod형태로 실행합니다. 작업(Task)마다 pod가 생성되므로 가볍고, Worker에 대한 유지 보수가 필요없습니다. 또한 Kubernetes를 활용하여 지속적으로 자원을 점유하지 않기 때문에 효율적으로 자원을 사용할 수 있습니다. 하지만 짧은 Task에도 pod를 생성하는 overhead가 있으며, 구성이 복잡하다는 단점이 존재합니다.


필수 개념

DAG(Directed Acyclic Graph) - 비순환 그래프

Airflow는 Task의 연결관계를 DAG로 관리하고 웹 인터페이스를 통해서도 DAG구조를 시각적으로 확인할 수 있습니다.

 

Operator

Task의 Wrapper 역할 수행하는 개념으로, Task를 구성하고, 정의하는 데 사용됩니다. 크게 Action, Transfer, Sensor, 3가지로 나뉩니다.

- Action Operator : 기능이나 명령을 실행하는 Operator

- Transfer Operator : 데이터를 Source에서 Destination으로 전송하는 Operator(Ex. Presto → MySQL)

- Sensor Operator : 특정 조건을 Sensing하여 실행하는 Operator, 조건이 충족되면 다음 Task 실행(Ex. 특정 위치에 파일이 생성되었을 경우 다음 Task 실행)

 

Task & Task Instance

- Task : Task는 데이터 파이프라인에 존재하는 Operator를 의미합니다.

- Task Instance : Task Instance는 데이터 파이프라인이 Trigger되어 실행될 때 생성된 Task를 Task Instance라고 합니다.

 

Workflow

워크플로우는 앞서 언급한 모든 개념들을 조합하여 만들어진 개념으로 파이프라인의 전체적인 흐름과 로직을 정의하는 개념입니다.


참고

 

What is Airflow™? — Airflow Documentation

 

airflow.apache.org

 

 

버킷플레이스 Airflow 도입기 - 오늘의집 블로그

탁월한 데이터플랫폼을 위한 Airflow 도입기

www.bucketplace.com

 

 

댓글