Apache Airflow
- Airbnb에서 개발한, Python을 이용하여 workflow를 관리할 수 있는 도구이다.
- 주로 data engineering 및 MLOps 영역에서
workflow를 작성, 스케줄링, 모니터링 하고자 할 때 사용한다.
- 데이터 파이프라인 구축 시 ETL 의 경우,
데이터를 Extraction → Transformation → Loading하는 작업 흐름이 있다.
이러한 workflow를 관리할 때 사용하는 툴이다.
- ML 방면의 경우,
모델 학습용 데이터 전처리 → train → predict 흐름에 사용한다.
- 단순히 batch 작업을 스케줄링하는 용도로도 사용하곤 한다.
components
web server
- Airflow 웹 서버에서 Web UI를 제공하여, 사용자는 이를 통해 시각적으로 정보를 얻을 수 있다.
- scheduler에 의해 생성된 DAG 목록, task 상태 등을 시각화한 것을 볼 수 있다.
- task를 수행함에 따른 로그를 확인할 수 있다.
scheduler
- scheduler를 실행함으로써, 설정해둔 schedule에 따라 DAG들을 trigger한다.
- executor에게 task를 제공해주는 역할을 한다.
- DAG 디렉터리를 주기적으로 스캔하여 DAG 목록을 최신화한다.
executor
- 설치 당시의 옵션에 따라, executor의 동작 방식에 차이가 있다.
- default: scheduler에 있는 모든 것들을 다 실행시킨다.
- production: worker에게 task를 push한다.
- task를 실행할 환경을 정의한다.
종류에 따라 local이나 별도의 노드 또는 컨테이너 환경에서 실행시킨다.
worker
DAG
Directed Acyclic Graph
- DAG는 파이썬 파일(.py) 하나로 작성할 수 있는 workflow이다.
- 유향 비순환 그래프로써, 루프가 발생하지 않도록 한다.
- 이러한 특성이 workflow에 적용된다.
- 어떤 순서로 task(노드)를 실행시킬 지,
dependency(링크)는 어떻게 할 지 등을 설정한다.
database
- Airflow에 있는 DAG, task 등의 metadata를 저장하고 관리한다.
- 기본적으로는 SQLite을 사용하지만,
실질적인 사용 시에는 분산 처리 등을 위해 MySQL과 같은 DBMS에 연결하여 사용한다.
features
- Airflow Operator
- task를 정의할 때 사용한다.
즉, Operator객체 각각이 task이다.
- PythonOperator, BashOperator 등 다양한 Operator가 존재하며,
각 Operator마다 수행하는 주체나 목적이 다르다.
- task relationship
- DAG는 task에 >>, <<, []을 이용하여 전후 및 병렬 관계를 표현할 수 있다.
(혹은, task_name.set_~stream(task_name)과 같은 형태로도 가능하다.)
- cron expression
- DAG의 schedule_interval에 사용되는 형식이다.
- None으로 두고, schedule이 아닌 외부 trigger에 의해 실행되도록 할 수도 있다.
- 순서대로 ‘분 시 일 월 요일’ 이다.