Airflow

Airflow - Executor

김모우 2022. 6. 28. 22:14
728x90
반응형

Executor란?

- Task가 실행되는 메커니즘으로 Airflow 당 하나의 Executor만 가질 수 있습니다.
- Executor는 파이썬 패키지를 통해 설치가 가능하면 airflow.cfg 에서 옵션을 변경하여 변경 할 수 있습니다.

Executor 종류

https://airflow.apache.org/docs/apache-airflow/stable/executor/index.html

 

Executor — Airflow Documentation

 

airflow.apache.org

위의 페이지에서 전체 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

## CeleryExecutor 설치
> source /home/airflow/sandbox/bin/activate
> pip install apache-airflow'[celery]' --constraint https://gist.githubusercontent.com/marclamberti/742efaef5b2d94f44666b0aec020be7c/raw/21c88601337250b6fd93f1adceb55282fb07b7ed/constraint.txt

## DB 관련 중간 작업은 이전 게시물 확인 바랍니다.
## 아래 설정도 이전 게시물에서 완료된 설정입니다!
> vim /home/airflow/airflow/airflow.cfg

## Airflow Celery Flower, Celery Worker 실행
> airflow celery flower
> airflow celery worker

## 정상 실행 시 아래와 같이 flower가 Default 5555 포트에서 실행됩니다.
> netstat -tnlp

 

작업확인

'DAG를 실행하여 Worker Node 정상 동작 여부 확인'

 

Flower 정상 동작 확인

작업 실행 확인

 

 

 

728x90
반응형

'Airflow' 카테고리의 다른 글

Airflow - MySqlOperator  (0) 2022.07.29
Airflow - SubDag & TaskGroup  (0) 2022.06.30
Airflow DB 변경  (0) 2022.06.27
Airflow 시작하기  (0) 2022.05.31
DAG 작성하기 - 1  (0) 2022.05.31