Airflow의 Executor
Apache Airflow의 Executor는 태스크를 실행하는 방식과 실행 환경을 결정하는 핵심 컴포넌트임.
Executor는 워크플로우의 성능과 확장성을 직접적으로 좌우함.
각 환경에 적합한 Executor를 선택하는 것이 중요함.
Airflow의 Executor 종류
1. SequentialExecutor
2. LocalExecutor
3. CeleryExecutor
4. KubernetesExecutor
5. DaskExecutor
6. DebugExecutor
SequentialExecutor
1. 특징
기본 설정으로 제공되며, 태스크를 순차적으로 하나씩 실행함.
데이터베이스와 함께 Airflow 초기 설정 및 테스트용으로 적합함.
2. 장점
간단하고 설정이 필요 없음.
로컬 테스트 및 단순 워크플로우에 적합.
3. 단점
병렬 실행 불가능.
대규모 워크플로우에는 적합하지 않음.
4. 사용 예제
airflow.cfg에서 다음과 같이 설정.
executor = SequentialExecutor
LocalExecutor
1. 특징
태스크를 로컬 프로세스에서 병렬로 실행.
병렬 처리를 위해 Python의 multiprocessing 모듈을 사용.
2. 장점
단일 머신에서 병렬 실행 가능.
설치 및 관리가 간단.
소규모 또는 중규모 워크플로우에 적합.
3. 단점
단일 노드에서만 실행되므로 확장성이 제한됨.
4. 사용 예제
executor = LocalExecutor
5. 병렬 작업 수 조정
parallelism 및 dag_concurrency 설정으로 동시 실행 태스크 수를 제어.
parallelism = 32
dag_concurrency = 16
CeleryExecutor
1. 특징
분산형 실행 환경으로, 여러 워커 노드에서 태스크를 실행.
메시지 브로커(Redis 또는 RabbitMQ)를 사용해 워커와 커뮤니케이션.
대규모 워크플로우 처리에 적합.
2. 장점
확장 가능: 워커 노드를 추가하여 병렬 처리 용량을 늘릴 수 있음.
높은 가용성 제공.
3. 단점
메시지 브로커 및 워커를 관리해야 하므로 복잡한 설정 필요.
추가 리소스가 필요.
4. 구성
airflow.cfg 설정
executor = CeleryExecutor
broker_url = redis://localhost:6379/0
result_backend = db+postgresql://user:password@localhost/airflow
워커 노드 실행
airflow celery worker
KubernetesExecutor
1. 특징
태스크를 쿠버네티스 Pod로 실행.
각 태스크가 고유한 Pod에서 실행되므로 리소스 격리와 확장성이 뛰어남.
2. 장점
높은 확장성: Kubernetes의 Auto-Scaling 지원.
태스크별 리소스 할당(CPU, 메모리).
클라우드 네이티브 환경에 적합.
3. 단점
쿠버네티스 클러스터 필요.
설정이 복잡하며, 클러스터 관리가 필요.
4. 사용 예제
airflow.cfg 설정
executor = KubernetesExecutor
Kubernetes 구성 예제
pod_template_file을 사용하여 태스크 실행 Pod의 기본 템플릿을 정의.
apiVersion: v1
kind: Pod
metadata:
labels:
airflow-worker: true
spec:
containers:
- name: base
image: apache/airflow:latest
resources:
limits:
memory: "512Mi"
cpu: "1"
DaskExecutor
1. 특징
Dask를 사용해 분산형 실행 환경을 제공함.
Python 중심 워크로드에 최적화된 Executor.
2. 장점
유연성과 확장성 제공.
Dask의 풍부한 데이터 처리 라이브러리와 통합 가능.
3. 단점
Dask 클러스터 필요.
Python 외의 태스크에는 적합하지 않을 수 있음.
4. 사용 예제:
airflow.cfg 설정
executor = DaskExecutor
dask_scheduler_address = tcp://scheduler-host:8786
Dask 클러스터 실행:
dask-scheduler
dask-worker tcp://scheduler-host:8786
DebugExecutor
1. 특징
태스크를 Airflow 프로세스 내에서 즉시 실행함.
주로 디버깅 및 테스트 목적으로 사용.
2. 장점
실행 결과를 즉시 확인 가능.
외부 리소스나 워커 필요 없음.
3. 단점
병렬 실행 불가능.
프로덕션 환경에 적합하지 않음.
4. 사용 예제
executor = DebugExecutor
Executor 비교
1. SequentialExecutor
병렬성 : 단일 태스크
확장성 : 제한적
운영 복잡성 : 매우 낮음
주요 사용 사례 : 로컬 테스트, 간단한 워크플로우
2. LocalExecutor
병렬성 : 단일 노드 병렬
확장성 : 제한적
운영 복잡성 : 낮음
주요 사용 사례 : 소규모 워크플로우
3. CeleryExecutor
병렬성 : 다중 노드 병렬
확장성 : 높음
운영 복잡성 : 높음
주요 사용 사례 : 대규모 분산 환경
4. KubernetesExecutor
병렬성 : 다중 노드 병렬
확장성 : 매우 높음
운영 복잡성 : 높음
주요 사용 사례 : 클라우드 네이티브 환경
5. DaskExecutor
병렬성 : 다중 노드 병렬
확장성 : 높음
운영 복잡성 : 중간
주요 사용 사례 : Python 데이터 처리
6. DebugExecutor
병렬성 : 단일 태스크
확장성 : 제한적
운영 복잡성 : 낮음
주요 사용 사례 : 디버깅 및 테스트
Executor 선택 기준
1. 테스트 및 개발
SequentialExecutor 또는 DebugExecutor.
2. 소규모 및 단일 노드 환경
LocalExecutor.
3. 대규모 분산 처리
CeleryExecutor(다양한 태스크 유형에 적합).
KubernetesExecutor(리소스 격리가 중요할 때).
4. Python 중심의 데이터 파이프라인
DaskExecutor.
5. 클라우드 네이티브 및 컨테이너 환경
KubernetesExecutor.
프로덕션 환경에서 고려할 사항
1. 확장성
태스크 수와 워크로드 크기에 따라 CeleryExecutor 또는 KubernetesExecutor를 선택.
2. 운영 복잡성
메시지 브로커, 쿠버네티스 클러스터 등 추가 인프라를 관리할 수 있는지 검토.
3. 비용
클라우드 환경에서는 Kubernetes 기반 실행의 비용 효율성을 평가.
4. 리소스 격리
KubernetesExecutor는 태스크 단위로 리소스를 격리할 수 있어 다중 테넌트 환경에서 적합.
Executor 정리
Airflow의 Executor는 워크플로우의 성능과 확장성에 큰 영향을 미침.
환경과 요구 사항에 맞는 Executor를 선택하는 것이 중요함.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] Airflow Github Oauth 연동시 Github 설정 (0) | 2024.12.27 |
---|---|
[Kubernetes] podDisruptionBudget 개념 (0) | 2024.12.27 |
[Kubernetes] k8s, PGBouncer 개념 (0) | 2024.12.26 |
[Kubernetes] 쿠버네티스 인그레스의 PathType (0) | 2024.12.26 |
[Kubernetes] 쿠버네티스 인그레스 개념 (0) | 2024.12.26 |