본문 바로가기

Data Mining & Distributed/Airflow

[ Airflow ] 3가지 방법으로 동시 실행 제한하기

반응형

Airflow에서 하나의 DAG 내에서 동시에 실행되는 작업의 수를 제한하려면 여러 가지 방법을 사용할 수 있습니다. 주요 방법으로는 DAG 수준Task 수준에서 동시 실행 수를 제한하는 설정이 있습니다.

1. DAG 수준에서 동시 실행 제한

max_active_runs 파라미터를 사용하여 하나의 DAG 내에서 동시에 실행될 수 있는 DAG 인스턴스의 수를 제한할 수 있습니다.

  • max_active_runs: 이 파라미터는 DAG가 동시에 실행할 수 있는 최대 인스턴스 수를 제한합니다. 예를 들어, 이 값을 1로 설정하면 하나의 DAG 인스턴스만 실행됩니다.
from airflow import DAG
from datetime import datetime

dag = DAG(
    'my_dag',
    start_date=datetime(2023, 1, 1),
    max_active_runs=1,  # 최대 활성화된 DAG 인스턴스를 1개로 제한
)

2. Task 수준에서 동시 실행 제한

각 개별 작업(Task)에서 동시에 실행되는 인스턴스 수를 제한하려면 concurrency 또는 task_concurrency를 사용할 수 있습니다.

  • concurrency: 전체 DAG 내에서 동시에 실행할 수 있는 작업의 최대 수를 설정합니다. 이는 DAG 내 모든 작업에 대해 동시 실행 제한을 설정하는 것입니다.
  • task_concurrency: 특정 작업(Task)에서 동시에 실행할 수 있는 인스턴스의 수를 설정합니다.

2.1 DAG 전체의 동시 실행 작업 수 제한

DAG 수준에서 concurrency를 설정하여 동시에 실행되는 작업 수를 제한할 수 있습니다.

dag = DAG(
    'my_dag',
    start_date=datetime(2023, 1, 1),
    concurrency=5,  # 최대 5개의 작업을 동시에 실행
)

2.2 개별 작업의 동시 실행 수 제한

각 작업(Task)에 대해 task_concurrency를 설정하여 해당 작업의 동시 실행 수를 제한할 수 있습니다.

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from datetime import datetime

dag = DAG(
    'my_dag',
    start_date=datetime(2023, 1, 1),
)

task1 = DummyOperator(
    task_id='task1',
    dag=dag,
    task_concurrency=3,  # 이 작업은 최대 3개 인스턴스가 동시에 실행 가능
)

task2 = DummyOperator(
    task_id='task2',
    dag=dag,
    task_concurrency=2,  # 이 작업은 최대 2개 인스턴스가 동시에 실행 가능
)

3. Pool을 사용하여 작업 실행 수 제한

Airflow에서는 Pool을 사용하여 여러 작업의 동시 실행 수를 제한할 수 있습니다. Pool은 여러 작업에 대해 리소스를 할당하고, 각 작업이 해당 리소스를 사용할 수 있도록 제한을 두는 방식입니다.

  • Pool은 Airflow UI에서 설정하거나, 코드에서 pool 파라미터를 사용하여 설정할 수 있습니다.

3.1 Pool 생성

Airflow UI나 CLI를 사용하여 Pool을 생성할 수 있습니다. 예를 들어, CLI에서 다음 명령어로 Pool을 생성할 수 있습니다:

airflow pools set my_pool 5 "My custom pool" 5

위 명령은 이름이 my_pool인 풀을 생성하고, 풀에 할당된 리소스를 동시에 사용할 수 있는 작업 수를 5로 설정합니다.

3.2 Task에서 Pool 사용

작업을 실행할 때 해당 작업에 풀을 할당하면, 해당 작업은 풀의 리소스를 사용하게 되어 동시 실행 수를 제한할 수 있습니다.

task1 = DummyOperator(
    task_id='task1',
    dag=dag,
    pool='my_pool',  # 'my_pool' 풀을 사용
)

4. 결론

  • max_active_runs는 하나의 DAG 내에서 동시에 실행될 수 있는 DAG 인스턴스 수를 제한합니다.
  • concurrencytask_concurrency는 각각 DAG 전체와 개별 Task에서 동시 실행 수를 제한합니다.
  • Pool을 사용하면 특정 리소스를 공유하는 작업들의 동시 실행 수를 제한할 수 있습니다.

이 방법들을 조합하여 Airflow에서 작업의 동시 실행 수를 효율적으로 관리할 수 있습니다.

반응형