IT Best Practise/Airflow

Apache Airflow LocalExecutor: 태스크 로컬 병렬 실행

GilliLab IT 2024. 11. 24. 15:53
728x90
반응형

Apache Airflow LocalExecutor: 태스크 로컬 병렬 실행

Apache Airflow는 워크플로우 관리를 위한 강력한 도구로, 데이터 파이프라인의 실행을 효율적으로 관리할 수 있는 여러 가지 Executor 옵션을 제공합니다. 그 중 LocalExecutor는 단일 노드 환경에서 병렬 작업을 실행할 수 있는 중요한 방식 중 하나로, 특히 개발 및 테스트 환경에서 큰 이점을 제공합니다. 이번 포스트에서는 Airflow의 LocalExecutor가 무엇인지, 어떤 장점과 단점이 있는지, 그리고 언제 사용하는 것이 적합한지 자세히 알아보겠습니다.

LocalExecutor 개요

  • DAG의 각 작업(task)을 로컬 머신에서 병렬로 실행하는 Apache Airflow의 Executor 중 하나.
  • Python의 multiprocessing 라이브러리를 활용하여 병렬로 작업 처리.
  • CPU 코어 수에 따라 작업의 병렬 실행 수를 조정 가능.
  • 외부 워커 노드를 사용할 필요가 없어 초기 설정이 간단하고 소규모 환경에 적합.

LocalExecutor 특징

  • 병렬 실행 가능: LocalExecutor는 여러 작업을 병렬 실행. Python의 multiprocessing을 사용하여 다중 프로세스로 작업 처리. 단일 프로세스 기반인 SequentialExecutor보다 효율적.
  • 단일 노드 실행: 모든 작업이 로컬 머신에서 실행되므로, CeleryExecutor처럼 분산 노드를 구성할 필요 없음. 설정의 복잡도 감소.
  • 테스트와 소규모 환경에 적합: 개발 환경이나 소규모 데이터 파이프라인에 유리하며, 설정이 간단하고 빠른 실행 가능.

LocalExecutor 설정 방법

  • Airflow 설정 파일(airflow.cfg)에서 executor 항목을 LocalExecutor로 지정:

    [core]
    executor = LocalExecutor
  • 동시에 실행할 최대 작업 수 설정 (parallelism 값 조정):

    [core]
    parallelism = 8
    • 최대 8개의 작업이 동시에 실행될 수 있도록 설정.

LocalExecutor 장점

  1. 간단한 설정: 분산 워커 관리가 필요 없어 설정이 비교적 간단.
  2. 병렬 처리 지원: 다중 프로세스를 활용하여 여러 작업을 동시에 실행, 처리 속도 향상.
  3. 테스트 용이성: 개발 및 테스트 단계에서 분산 시스템 없이도 병렬 처리를 실험할 수 있는 환경 제공.

LocalExecutor 단점

  1. 확장성의 한계: 단일 머신의 자원만을 사용하므로 대규모 데이터 파이프라인에서는 확장성 한계.
  2. 장애 복구의 어려움: 모든 작업이 하나의 머신에서 실행되므로 시스템 장애 시 전체 작업에 영향.
  3. 리소스 경합 문제: 동일한 CPU와 메모리를 공유하여 작업 간 자원 경합 발생 가능.

LocalExecutor 사용 사례

  • 개발 및 테스트 환경: 복잡한 설정 없이 병렬 실행을 실험하고자 하는 경우에 적합.
  • 소규모 DAG 실행: 대규모 클러스터가 필요하지 않은 소규모 데이터 파이프라인에 적합.

LocalExecutor 사용 예제

Classic 방식

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

def print_message(task_number):
    print(f"Task {task_number} is running")

# DAG 정의
with DAG(
    dag_id='localexecutor_example',
    start_date=datetime(2024, 1, 1),
    schedule_interval='@daily',
    catchup=False
) as dag:

    # 병렬로 실행될 세 개의 작업 정의
    task_1 = PythonOperator(
        task_id='print_message_1',
        python_callable=print_message,
        op_args=[1]
    )

    task_2 = PythonOperator(
        task_id='print_message_2',
        python_callable=print_message,
        op_args=[2]
    )

    task_3 = PythonOperator(
        task_id='print_message_3',
        python_callable=print_message,
        op_args=[3]
    )

    # 작업을 병렬로 실행하도록 설정
    [task_1, task_2, task_3]
  • print_message 함수는 메시지 출력 역할.
  • 세 개의 작업 (task_1, task_2, task_3) 각각 병렬 실행.
  • LocalExecutor를 사용해 병렬 처리 가능, DAG를 로컬에서 테스트하거나 작은 규모의 작업에 유용.

Task Flow API 방식

  • Airflow 2.0부터 지원하는 Task Flow API를 사용하여 동일한 예제 작성.
from airflow import DAG
from airflow.decorators import task
from datetime import datetime

# DAG 정의
with DAG(
    dag_id='localexecutor_taskflow_example',
    start_date=datetime(2024, 1, 1),
    schedule_interval='@daily',
    catchup=False
) as dag:

    @task
    def print_message(task_number):
        print(f"Task {task_number} is running")

    # 병렬로 실행될 세 개의 작업 정의
    task_1 = print_message(1)
    task_2 = print_message(2)
    task_3 = print_message(3)
  • @task 데코레이터를 사용하여 각 작업 정의.
  • task_1, task_2, task_3 각각 병렬 실행.
  • Task Flow API는 코드 가독성 향상 및 간편한 작업 정의 제공.

LocalExecutor와 다른 Executor 비교

  • SequentialExecutor: 작업을 순차적으로 실행. 리소스 소모 적음. 간단한 테스트에 유리. 병렬 처리 미지원.
  • CeleryExecutor: 여러 노드에서 작업을 분산 실행. 확장성 뛰어남. 설정과 관리가 복잡.
  • KubernetesExecutor: Kubernetes 클러스터에서 작업을 실행. 유연성과 확장성 제공. 대규모 워크로드에 적합.

LocalExecutor는 간단한 설정과 로컬 병렬 실행의 장점을 제공. 개발 및 초기 테스트 환경에서 매우 유용. 대규모 데이터 파이프라인이나 고가용성이 필요한 경우 CeleryExecutor나 KubernetesExecutor 같은 옵션으로 전환 필요.

마무리

Airflow의 LocalExecutor는 작은 규모의 프로젝트나 개발 환경에서 효율적인 병렬 처리를 위해 좋은 선택입니다. 설정이 간단하고 테스트가 용이하지만, 확장성에는 한계가 있습니다. 프로젝트의 규모와 요구 사항에 따라 적절한 Executor를 선택하는 것이 중요하며, 초기에는 LocalExecutor를 사용하고 필요에 따라 CeleryExecutor나 KubernetesExecutor로 확장하는 전략을 권장합니다.

Airflow를 처음 접하거나 소규모 파이프라인을 구축하려는 분들에게 LocalExecutor는 설정이 간단하고 사용하기에 매우 유익한 선택입니다.

Keywords

Apache Airflow, LocalExecutor, Workflow Management, Python, Task Scheduling, 에어플로우, 로컬익스큐터, 워크플로우 관리, 파이프라인, 병렬 처리

728x90
반응형