Airflow?
- 파이썬으로 작성된 데이터 파이프라인을 구축하고 관리하기 위한 오픈 소스 플랫폼!
- 워크플로우 작성을 통해 데이터 파이프라인 스케줄링 지원
DAG?
- DAG(Directed Acyclic Graph) : Airflow의 ETL 파이프라인!
- Task 간의 의존 관계를 나타내는 그래프로, 방향성이 있고, 순환이 없는 그래프!
- 각 노드는 Task를 나타내며, Edge는 Task 간의 의존성!
- 방향성이 있기에, 특정 Task가 완료된 후에만 다음 Task 실행 가능!
Airflow Architecture
Web Server
- Airflow의 UI를 제공하며, Flask로 작성!
- UI를 통해 DAG의 상태를 확인하고, 모니터링 등의 작업 가능!
Scheduler
- DAG의 실행을 스케줄링하고, 지정된 시간에 맞춰 DAG의 Task를 실행
Worker
- 실제로 Task를 실행하는 컴포넌트
- Scheduler에 의해 할당된 작업을 수행
- 여러 대의 워커를 사용하면 병렬로 여러 작업 동시 실행 가능
- 기본적으로 하나의 워커에서 여러 작업 처리 가능
- Task Queue에서 Task를 가져와 실행하며, 작업이 완료되면 결과를 Metadata Database에 기록
Metadata Database
- Airflow의 중앙 저장소 역할
- DAG의 상태, Task의 상태, 실행 시간 등의 정보를 저장
- 기본적으로 SQLite를 사용하지만, PostgreSQL, MySQL 등의 Database 사용 가능
Queue
- Task를 Worker로 전달하는 메커니즘
- 다수의 서버에서 분산 처리할 때 사용
- 여러 대의 Worker가 있을 경우, Task를 Queue에 넣고 여러 대의 Worker가 Task를 병렬 처리하도록 처리
- Worker가 실행할 Task를 가져오는 장소로 사용
Executor
- 실제로 Task의 실행 방법을 결정하는 컴포넌트
- Queue와 함께 사용되며, Executor는 어떤 방식으로 Task를 실행할지 정의
- 주요 종류
- SequentialExecutor: 하나의 Worker만 사용하여 Task를 순차적으로 실행, 개발 및 테스트 환경에 사용
-> Default로 설치되며 Sqlite와 같은 Single Thread DB에서만 사용 가능! - LocalExecutor : 로컬(마스터 노드)에서 여러 Task를 병렬로 실행
- CeleryExecutor : 여러 Worker가 분산 환경에서 Task를 처리할 수 있도록 지원, 대규모 환경에서 사용
- KubernetesExecutor : K8s 클러스터를 사용하여 Task를 독립된 환경에서 사용
- SequentialExecutor: 하나의 Worker만 사용하여 Task를 순차적으로 실행, 개발 및 테스트 환경에 사용
단일 서버 | 다중 서버 |
Airflow 장단점
장점
- 다양한 종류의 워크플로우를 유연하게 관리 가능
- 다양한 데이터 소스와 데이터 웨어하우스 지원
- 주기적인 작업 자동화를 위한 스케줄링 기능 제공
- Backfill이 간편
- Backfill : 누락된 Task나 오류로 인해, 실패한 데이터 파이프라인을 재실행하거나, 실행되지 않은 작업을 재실행하는 프로세스
- Backfill : 누락된 Task나 오류로 인해, 실패한 데이터 파이프라인을 재실행하거나, 실행되지 않은 작업을 재실행하는 프로세스
단점
- 복잡한 설정과 커스터마이징이 존재하기에, 높은 학습 난이도
- 복잡한 시스템을 구성해야 하기에, 높은 설정, 구성 난이도
'데이터 > Airflow' 카테고리의 다른 글
[Airflow] 6. Slack Alert (0) | 2024.11.18 |
---|---|
[Airflow] 5. Backfill? (1) | 2024.11.12 |
[Airflow] 4. Airflow.cfg? (0) | 2024.11.11 |
[Airflow] 3. Python Operator / Task Decorator (0) | 2024.11.10 |
[Airflow] 2. XCom? (1) | 2024.11.10 |