728x90
1. Airflow 의 주요 컴포넌트
- Scheduler : workflow 스케줄을 실행시키고 executor 에게 task 를 제출하여 실행시킨다.
- Executor : task 실행을 관리하는 컴포넌트
- Worker : 실제로 task 를 실행시키는 컴포넌트
- Webserver : DAG의 실행을 UI상에서 확인할 수 있도록 웹 서버를 제공한다.
- Metadata Database : DAGs 에 대한 정보와 task 의 상태에 대한 정보를 저장한다.
- Dags (folder) : DAG를 구성하는 코드가 있는 경로이다. airflow.cfg 파일에서 기본 경로를 설정할 수 있다.
2. Airflow Executor 의 종류
Sequential Executor
- 기본 executor 이다.
- 한번에 하나의 task 만 실행할 수 있다.
- SQLite 가 권장된다.
장점
- 다른 셋팅을 할 필요가 없다.
- 가볍고 비용이 저렴하다.
단점
- scalable 하지 않다.
- 한번에 하나의 task 만 실행하기 때문에 느리다.
- fail 되는 지점이 하나이다.
- production 환경에서 적합하지 않다.
Local Executors
sequential executor 와 동일하나 차이점은 한번에 여러개의 task 를 실행시킬 수 있다는 점이다.
장점
- setup 이 용이하고, 상대적으로 저렴하고 가볍다.
- 한번에 여러 task 들을 실행시킬 수 있다.
단점
- 확장에는 적합하지 않다.
- production 환경에 적합하지 않다.
- single point of failure
Celery Executor
위의 두 executor 와 다르게, 전용 머신에서 task 를 실행한다.
task 를 분산처리한다.
장점
- 수평적 확장이 가능하고, fault tolerant 하다.
- production 환경에 적합하다.
단점
- setup 하는데 시간이 소요된다.
- 스케줄링 된 task 가 없는 경우에는 자원의 낭비가 일어날 수 있다.
- 위의 두 방법에 비해 비용이 높다.
Kubernetes Executor
전용 Pod 에서 task 를 실행한다. Kubernetes API 를 통해 pod 를 관리한다.
장점
- scaling 이 가능하다.
- fault tolerant 하다.
- 각각의 task 에 resource 를 할당할 수 있다.
- 비용 및 자원 효율적이다.
단점
- Pod 를 띄우는 데 몇 초 정도 걸릴 수 있다.
- k8s 배경 지식이 필요하다.
Local Executor vs Celery Executor 비교하기
Local Executor 는 단일 머신에서 task 를 병렬로 실행시킨다. 여러 작업을 동시해 처리하지만 결국 이 모든 작업은 단일 머신에서 실행된다. 반면에 Celery Executor 는 작업을 여러대의 worker node 에 분산하여 실행한다. 분산처리 특성상 확장성 (scalability) 을 높일 수 있다는 점이 특징이다. Celery Executor 는 task 를 queue에 넣고, worker들이 queue에서 task 를 가져가서 처리하는 방식으로 동작한다. 따라서 RabbitMQ나 Redis 같은 message broker 를 필요로 한다.
사이드 프로젝트에서는 처음에 sequential executor 로 배포해보았다가, 비용과 효율성을 고려하여 local executor 로 마이그레이션을 결정했다.
Reference
728x90
'Data Engineering > Airflow' 카테고리의 다른 글
[Apache Airflow 기반의 데이터 파이프라인] Ch01. Apache Airflow 살펴보기 (0) | 2024.07.26 |
---|---|
[Airflow] fork() may lead to deadlocks in the child 해결하기 (2) | 2024.06.15 |