What is Airflow?
What is Airflow
Airflow is a platform to programmatically author, schedule and monitor workflow
위 문장이 Apache Airflow 공식 사이트에 게시되어 있는 Airflow 한 줄 소개글이다.
Airflow는 Workflow를 프로그래밍적으로 작성할 수 있고, Schedule 하고 모니터링을 하게 해주는 Platform이다.
다르게 해석하면 작업들을 일정한 시간에 정확한 방법으로 올바른 순서대로 실행하게 해주는 Tool이다.
장점
Dynamic
Airflow에서 Pipeline은 Python으로 정의할 수 있다.
Python으로 가능한 것이면 Airflow에서 Pipeline내 Task로 실행할 수 있다.
Scalable
Airflow는 Scalable하다.
Arictecture를 어떻게 구성하느냐, Resource가 얼마나 되는지에 따라 얼마든지 Task를 병렬로 실행할 수 있다.
Arflow는 Modular Architecture로 구성되며 Message Queue를 사용한다.
User Interface
Airflow는 편하고 보기에 좋은 Web Interface를 제공한다.
Web Appliation을 통해 쉽게 Pipeline를 모니터링, 관리할 수 있다.
어렵지 않아 쉽게 이용할 수 있다.
Extensible
Airflow는 Extensible 한다.
필요한 기능에 대해 plugin 형태로 쉽게 적용 가능하다.
커스텀 기능을 추가하기도 좋다.
구성
- WebServer
- Scheduler
- Daemon Service로 Task의 Scheduling 담당
- Task 모니터링, 관리
- Metastore
- Airflow에 관련된 모든 Data를 저장하는 Database
- SqlAlchemy를 통해 Metastore와 Interact
- Default는 SQLite이며, PostgreSQL, MySQL로 가능
- Executor
- Task 수행 방식 정의(the mechanism by which task instances get run)
- 종류
- Local -> Debug, Local, Sequential Executor
- Remote -> Celery, CeleryKubernetes, Dask, Kubernetes Executor
- Worker
- 실제로 Task를 수행하는 주체
Concept
DAG
Directed Acyclic Graph
DAG는 방향을 가진 비순환 Graph이다.
위 그래프는 DAG이다.
순환하지 않고 일방향 성만 가진다.
Airflow Pipeline은 DAG 형태로 구성된다.
Operator
Operator는 Task의 Template 역할을 한다.
DAG내에서 정의할 수 있다.
with DAG("my-dag") as dag:
ping = SimpleHttpOperator(endpoint="http://example.com/update/")
email = EmailOperator(to="admin@example.com", subject="Update complete")
ping >> email
Operator는 아래와 같이 3가지 종류가 있다.
- Action Operator
- Function이나 Command 실행
- BashOperator, PythonOperator ...
- Transfer Operator
- Data를 Source -> Target에 Transfer
- Sensor
- 특정 조건을 만족했을 때 실행
Operator의 종류는 많다.
기본적으로 설치가 되지 않는 Operator는 추가적인 설치가 필요하다.(참고링크)
Task / Task Instance
Data Pipeline이 trigger에 의해 실행되면 Pipeline 내 정의된 Task가 실행된다.
이렇게 실행된 Task가 Task Instance이다.
OOP관점에서 Task는 Class이며 Task Instance는 Object이다.
Airflow는 Data Streaming Solution도 Data Proessing Framewokr도 아니다.
그런 빅데이터 처리는 Spark에서 해야 한다.
Airflow는 Orchestrator이다.