728x90
이번 포스트에는 Airflow의 구조에 대해서 간단하게 정리 해보겠습니다.
1. LocalExecutor를 사용하는 Single Node Architecture
Single Node Architecutre에는 크게 4가지 모듈이 있습니다.
- WebServer:
- Airflow의 웹서버는 사용자가 DAG의 상태를 확인하거나 로그를 조회할 수 있도록 웹 인터페이스를 제공
- 기본적으로 Flask로 구축되어 있음
- Scheduler:
- Airflow 스케줄러는 정의된 DAG(Directed Acyclic Graph)의 Task를 스케줄에 따라 실행
- 여러 DAG에서 병렬 작업을 관리하며, Executor와 연동해 작업을 처리
- Metastore: DAG, USER, 권한, 실행 이력과 같은 테이블을 저장하고 있으며, PostgreSQL, MySQL과 같은 DB와 연결해서 사용하며, 기본적으로는 SQLite를 사용(병렬처리에 부적합)
- Executor(Queue): 여기에서는 Redis, RabbitMQ와 같은 외부 Queue를 사용하지 않고, 기본적으로는 Python의 멀티프로세싱을 기반으로 구현( Airflow가 실행되는 로컬 머신에서 Python의 multiprocessing 라이브러리를 사용하여 병렬 작업을 처리)
- StatsD: 애플리케이션에서 발생하는 메트릭 데이터를 수집하고, 이를 모니터링 시스템(예: Graphite, Prometheus, Datadog 등)으로 전달하는 데 사용되는 프로토콜 및 데몬
- Airflow는 DAG 실행, Task 성공/실패, 스케줄러 상태 등과 같은 다양한 이벤트를 메트릭으로 노출합니다.
- StatsD를 활성화하면 Airflow는 이러한 메트릭을 StatsD 서버로 전송하여 모니터링 및 분석이 가능해집니다.
- Task 관련 메트릭
- Task 성공/실패/재시도 횟수
- Task 실행 시간
- DAG 관련 메트릭
- DAG 실행 상태
- DAG 스케줄링 지연 시간
- Scheduler 관련 메트릭
- Scheduler 루프 실행 시간
- Scheduled Task의 수
- Worker 관련 메트릭
- Worker 실행 상태
- Queue에서 처리된 작업 수
동작 순서
- 웹서버와 스케줄러는 이런 정보를 읽어오고 Executor로 보내 실행
- 이렇게 실행된 DAG의 task instance는 메타스토어로 다시 보내져서 상태를 업데이트
- 업데이트된 상태를 웹서버와 스케줄러가 읽어와서 task가 완료됐는지 확인
- executor안에는 Queue라는 것이 존재해서 task의 순서를 정하여 진행
2. (Celery)Multi Node Architecture
Airflow Multi-Node Architecture도 크게 다를 바는 없는데, 여기서 다수의 worker를 다룰 Celery Broker와 Redis, RabbitMQ같은 Queue가 추가적으로 필요합니다.(Flower와 같은 Celery monitoring 도구는 옵션)
- WebServer:
- Airflow의 웹서버는 사용자가 DAG의 상태를 확인하거나 로그를 조회할 수 있도록 웹 인터페이스를 제공
- 기본적으로 Flask로 구축되어 있음
- Scheduler:
- Airflow 스케줄러는 정의된 DAG(Directed Acyclic Graph)의 Task를 스케줄에 따라 실행
- 여러 DAG에서 병렬 작업을 관리하며, Executor와 연동해 작업을 처리
- Metastore: DAG, USER, 권한, 실행 이력과 같은 테이블을 저장하고 있으며, PostgreSQL, MySQL과 같은 DB와 연결해서 사용하며, MultiNode Cluster에는 SQLite를 사용하지 못함(병렬처리를 해야 하기 때문에)
- Executor(Queue): 여기에서는 Redis, RabbitMQ와 같은 외부 Queue를 사용하며, Celery Executor를 사용
- StatsD: 애플리케이션에서 발생하는 메트릭 데이터를 수집하고, 이를 모니터링 시스템(예: Graphite, Prometheus, Datadog 등)으로 전달하는 데 사용되는 프로토콜 및 데몬
Celery vs Redis
동작 순서
- Queue가 Executor 바깥에 존재(Redis, RabbitMQ)
- Airflow UI 와 스케줄러가 메타스토어의 실행 정보를 읽어옴
- 읽어온 정보를 Celery Broker에 순서대로 담음
- 순서대로 담긴 task를 worker들이 실행
- 완료된 후에는 Metastore, celery executor에 보고 되고 스케줄러가 완료된 것을 확인
728x90
'BigData > Apache Airflow' 카테고리의 다른 글
[Airflow] TO-BE Batch job 프로세스 개선 - 3) DAG 이전 및 이슈 정리 (0) | 2024.06.22 |
---|---|
[Airflow] TO-BE Batch job 프로세스 개선 - 2) 거버넌스, 표준, 형상 관리, 자동화, 프로세스 단축 (0) | 2024.06.22 |
[Airflow] TO-BE Batch job 프로세스 개선 - 1) Airflow on k8s 이전(AWS EKS) (0) | 2024.06.22 |
[Airflow] Sensor 정리, ExternalTaskSensor 와 S3KeySensor (0) | 2024.06.22 |
[Airflow] Prometheus & Grafana에서 확인 할 수 있는 Airflow metrics 정리 (0) | 2024.05.18 |
댓글