오늘은 Airflow가 어떤건지에 대해서 알아보고자 한다.
본 포스팅을 통해 Airflow의 기본이 되는 개념을 정리한다.
Apache Airflow 란?
- Airflow 공식 홈페이지
https://airflow.apache.org/docs/apache-airflow/stable/index.html
공식 홈페이지에 나와있는 Apache Airflow의 정의는 "프로그래밍 방식으로 워크플로우를 작성, 예약 및 모니터링"하는 오픈소스 플랫폼이다.
Python 코드로 워크플로우(workflow)를 작성하고 스케줄링, 모니터링 하는 플랫폼이다. Airflow를 통해서 데이터엔지니어링 ETL 작업을 자동화하고, DAG(Directed Acyclic Graph)형태의 워크플로우 작성이 가능하다. 이를 통해 더 정교한 Dependency를 가진 파이프라인을 설정할 수 있다. 또란 AWS, GCP 모두 Airflow managed service를 제공할 정도로 전세계 데이터팀들에게 널리 사용되고 있으며 그만큼 넓은 커뮤니티를 형성하고 있다.
Airflow를 사용하는 이유
- 데이터 엔지니어링에선 데이터 ETL(Extract, Transform, Load) 과정을 통해 데이터를 가공하며 적재함
- 머신러닝 분야에서도 모델 학습용 데이터 전처리, Train, Prediction시 사용 가능
- 좀 더 디테일한 머신러닝 사이클을 관리하기 위해선 데이터브릭스에서 만든 MLflow를 사용하는 방법도 있음
- 여러 개의 Sequential한 로직(앞의 output값 == 뒤의 input값)이 존재하는데 이런 로직들을 한번에 관리해야 할 때 주로 사용
- 관리할 로직이 적다면 CRON + 서버에 직접 접속해 디버깅하는 방식으로 사용할 수 있지만, 점점 관리할 테스크들이 많아지면 헷갈리는 경우가 생김
- 하지만, 이런 Workflow Management 도구는 airflow외에도 하둡 에코시스템 우지(oozie), luigi 같은 솔루션이 존재
Airflow 장점
- Dinamic Data Pipeline
Airflow는 데이터 파이프라인을 정의하는데, Python을 이용한다. 따라서, Python으로 가능한 대부분의 작업들을, Airflow 파이프라인에서 처리가 가능하다.
- Scalability
Airflow는 매우 뛰어난 확장성을 가지고 있다. 원하는 만큼의 다양한 Tash들을 병렬적으로 실행이 가능(Parellelly executable)하다. 또한 쿠버네티스(Kubernetes) 클러스터, 분산 클러스터 환경에서도 파이프라이닝이 가능하다.
- Useful User Interface
Airflow Webserver에서 제공해주는 웹 인터페이스를 통해 데이터 파이프라인을 모니터링, 관리하기 매우 편리하다.
- High Extensiblility
Airflow Instance에는 손쉽게 Plugin을 설치할 수 있어서, 새로운 작업 툴이 나와 적용해야할 필요가 있을때는 플러그인을 개발하여 적용할 수 있다. 따라서 Airflow가 특정 툴을 지원할 때까지 기다릴 필요가 없다. 이처럼 Airflow Instance는 Customizing 하기가 굉장히 쉽다.
구글 클라우드 플랫폼(BigQuery, Dataflow)을 쉽게 사용할 수 있도록 제공되기 때문에 GCP를 사용한다면 Airflow도 반드시 사용할 것을 추천한다.
Airflow의 동작 원리
- Scheduler : 모든 DAG와 Task에 대하여 모니터링 및 관리하고, 실행해야할 Task를 스케줄링 해줍니다. Airflow에서 가장 핵심이 되는 컴포넌트
- Web Server : Airflow의 웹 인터페이스를 제공하는 웹 UI 서버. Flask와 Gunicorn을 이용하여 인터페이스를 제공
- DAG : Directed Acyclic Graph로 개발자가 Python으로 작성한 워크플로우이고, Tash들의 dependency를 정의
- Database : Airflow에 존재하는 DAG와 Task들의 메타데이터를 저장하는 데이터베이스
- Worker : 실제 Task를 실행하는 주체로 Executor 종류에 따라 동작 방식이 다양하다
Airflow는 개발자가 작성한 Python DAG를 읽고, 거기에 맞춰 Scheduler가 Task를 스케줄링하면, Worker가 Task를 가져가 실행한다. Task의 실행상태는 Database에 저장되고, 사용자는 UI를 통해서 각 Task의 실행상태, 성공 여부 등을 확인할 수 있다.
Airflow DAG(Directed Acyclic graph)
위 이미지에서 보이는 것처럼 방향을 가진 그래프 중 순환을 하지 않는 그래프를 뜻합니다.
Airflow는 Task의 연결관계를 DAG로 관리하고, 웹 인터페이스를 통해서도 DAG 구조를 시각적으로 확인할 수 있다.
따라서, DAG를 정확하게 설정해야, Task를 원하는대로 스케줄링할 수 있다.
Airflow Operator
각 Airflow DAG는 여러 Task로 이루어져 있다. Operator나 sensor가 하나의 Task로 만들어져 있고 Operator는 원하는 작업을 달성하기 위해 존재한다. 예를 들어, DB에 연결하여 데이터를 Insert 하고 싶다면 Operator를 이용하여야 작업을 할 수 있음
- BashOperator : Bash Command를 실행
- PythonOperator : Python 함수 실행
- EmailOperator : Email 발송
- MysqlOperator : sql 쿼리 수행
- SensorOperator : 시간, 파일, db row, 등을 기다리는 센서
이러한, Airflow 다양한 기능을 활용해서 스케줄링, 모니터링할 수 있다. 현재 다양한 기관과 조직에서 Airflow를 사용중에 있고 유의미한 효과를 거둔것으로 보인다.
추후 Airflow 관련 추가 지식, 코드가 생기면 관련해서 업로드를 진행할 예정이다.
Reference
- https://www.bucketplace.com/post/2021-04-13-%EB%B2%84%ED%82%B7%ED%94%8C%EB%A0%88%EC%9D%B4%EC%8A%A4-airflow-%EB%8F%84%EC%9E%85%EA%B8%B0/
- https://velog.io/@jjongbumeee/Airflow1
- https://zzsza.github.io/data/2018/01/04/airflow-1/
'DB(DataBase) > DataEngineer' 카테고리의 다른 글
[Trino]Trino란 무엇일까? (0) | 2024.01.18 |
---|---|
[DataEngineer] 데이터 엔지니어 총 정리 (2) | 2023.12.27 |