위의 페이지에서 전체 Executor 목록에 대해서 확인 가능하며, 주로 사용하는 Executor 들의 특성에 대해서 정리해보았습니다.
SequentialExecutor
Airflow 설치 시 가장 기본으로 제공되는 Executor로써 병렬 작업은 지원하지 않습니다.
Airflow Executor 중 유일하게 Sqlite DB와 호환됩니다.
LocalExecutor
하나의 Webserver에서 Airflow Webserver, Scheduler, Executor를 모두 실행하는 형태
Task를 Process 형태로 Spawn 하여 실행하는 방식
병렬 작업 지원
parallelism 설정 값에 따라 두 가지 구조로 나뉘어짐
self.parallelism==0 -> execute_async가 호출될 때마다 Process가 생성되며 result_queue에 작업 결과는 저장합니다. (LocalWorker)
self.parallelism > 0 -> 실행 시에 self.parallelism 의 개수 만큼의 Process가 생성되며 task_queue를 통해 효율적으로 작업을 분배합니다. (QueuedLocalWorker)
CeleryExecutor
Worker 노드를 HA 구성하거나 Scale Out 하는 방법 중 가장 간단한 Executor 실행 방식입니다.
Worker 노드에 작업 분배를 위해 Message Broker "Redis, RabbitMQ 등"이 필요합니다.
KubeExecutor
k8s를 사용하여 Worker 노드를 운영하므로 HA 구성가 손쉬운 Scale Out 방식을 제공합니다.
k8s의 각 Pod에서 Task를 실행합니다.
Airflow Scheduler는 k8s Cluster에서 실행될 필요는 없지만 k8s Cluster Access 권한을 필요로 합니다.
Airflow backend_result는 SQlite가 아닌 다른 DB를 필요로 합니다.
CeleryExecutor 변경
<CeleryExecutor 단일 노드 구조>
CeleryExecutor를 단일 WokerNode 형태로 구성해보겠습니다.
## Redis Server 설치 > sudo apt-get install redis-server > vim /etc/redis/redis.conf
## 아래와 같이 supervised 형태를 변경해줍니다.
## Redis 실행 > sudo systemctl start redis.service > sudo systemctl enable redis.service > sudo systemctl status redis.service
## DB 관련 중간 작업은 이전 게시물 확인 바랍니다. ## 아래 설정도 이전 게시물에서 완료된 설정입니다! > vim /home/airflow/airflow/airflow.cfg ## Airflow Celery Flower, Celery Worker 실행 > airflow celery flower > airflow celery worker
## 정상 실행 시 아래와 같이 flower가 Default 5555 포트에서 실행됩니다. > netstat -tnlp