Data Engineering/Airflow

[Airflow] 주요 컴포넌트와 Executor 의 종류

minjiwoo 2024. 6. 2. 19:41
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

https://www.youtube.com/watch?v=TQIInLmKM4k&t=4s 

728x90