이번 포스팅에서는 Apache Airflow의 기본 개념과 사용에 대해서 정리해보려고 한다.
이전에 AWS의 EventBridge라는 서비스를 사용해서 셍성한 Lambda 함수를 일정 주기의 시간동안 정기적으로 실행되도록 스케줄링해서 실습한 적이 있는데, Task를 좀 더 복잡한 구조로 스케줄링하기 위해서는 Apache Airflow를 활용하는 것이 좀 더 효율적이라고 오프라인 수업에서 배워서, 한 번 Apache Airflow를 사용해서 데이터 파이프라인을 구축해보고자 학습을 하게 되었다. 그리고 지원하고자 하는 기업에서 Apache Airflow를 업무에서 도입을 하여 사용하고 있기 때문에 좀 더 잘 이해하고 사용해보려고 한다.
Apache Airflow를 사용하는 이유
데이터 파이프라인 구축에 있어, 데이터를 추출하는 Extract
, 데이터를 적재하는 Load
, 데이터를 변환하는 Transform
과정을 거친다. 데이터 추출은 API를 통해서 하기도 하며, Load는 Snowflake와 같은 data warehousing, data lake와 같은 Single platform을 제공하는 SaaS를 활용하기도 한다. 그리고 Transform은 Dbt와 같은 분석을 위한 데이터 웨어하우스에 적재된 데이터를 간단한 SELECT 문 작성을 통해 변환을 할 수도 있다.
만약 Extract, Load, Transform 단계에서 예기치 못한 에러가 발생한다면, 그리고 데이터 파이프라인이 한 개가 아닌 100개 이상이라면 어떨까?
관리하기가 많이 어려워진다. 이러한 이유로 인해 Airflow를 사용해서 종합적인 파이프라인의 관리가 필요하다.
DAG(Directed Acyclic Graph)
DAG는 방향성 비순환 그래프
로, Airfow의 주요 컨셉이며, 복수 개의 Task를 모아서 어떻게 실행이 되어야 하는지에 대한 종속성과 관계에 따라 구조화 시키는 것을 말한다.
Operator
Operator는 Task이며, 실행이 되면 Task instance가 생성이 되며, Operator의 예로는 Action operator
, Transfer operator
, Sensor operator
가 있다.
Action operator의 예로는 Python operator
, Bash operator
가 있는데, Python operator는 Python function을 실행시키며, Bash operator는 Bash command를 실행시키는 역할을 한다. 그리고 Transfer operator의 예로는 MySQL의 데이터를 RedShift로 이전하는 작업이 있으며, Sensor operator의 예로는 특정 이벤트가 발생하면 다음 Step으로 넘어가도록 하는 작업이 있다.
Apache Airflow의 요소
Apache Airflow에는 Webserver, Meta store, Scheduler, Executor, Queue, Worker가 있다.
Executor
는 직접적으로 Task를 실행하지 않으며, K8S 클러스터는 K8S Executor
를 사용하고, Celery 클러스터는 Celery Executor
를 사용한다. 여기서 Celery는 multiple machine에서의 multiple tasks를 실행하기 위한 Python 프레임워크이다.
Queue
는 주어진 Task를 보장된 순서로 실행시키기 위해 존재한다.
Worker
는 Task가 효과적으로 실행될 수 있도록 하는 역할을 하며, Worker가 없다면, sub processes 혹은 K8S를 사용하는 경우, Path가 주어진다.
Apache Airflow의 Architecture
Apache Airflow의 Architecture로는 단일 노드로 구성된 One Node Architecture
, 그리고 복수 개의 노드들로 구성된 Multi Node Architecture
가 있다.