Amazon MWAA의 Apache Airflow 성능 튜닝
이 페이지에서는 Amazon MWAA에서 Apache Airflow 구성 옵션 사용를 사용하여 Amazon Managed Workflows for Apache Airflow 환경의 성능을 조정할 때 권장하는 모범 사례를 설명합니다.
Apache Airflow 구성 옵션 추가
다음 절차에서는 Airflow 구성 옵션을 환경에 추가하는 단계를 안내합니다.
-
Amazon MWAA 콘솔에서 환경 페이지를 엽니다.
-
환경을 선택합니다.
-
편집을 선택합니다.
-
다음을 선택합니다.
-
Airflow 구성 옵션 창에서 사용자 지정 구성 추가를 선택합니다.
-
드롭다운 목록에서 구성을 선택하고 값을 입력하거나, 사용자 정의 구성을 입력하고 값을 입력합니다.
-
추가하려는 각 구성에 대해 사용자 정의 구성 추가를 선택합니다.
-
Save(저장)를 선택합니다.
자세한 내용은 Amazon MWAA에서 Apache Airflow 구성 옵션 사용 섹션을 참조하십시오.
Apache Airflow 스케줄러
Apache Airflow 스케줄러는 Apache Airflow의 핵심 구성 요소입니다. 스케줄러에 문제가 있으면 DAG가 파싱되지 않고 작업이 예약되지 않을 수 있습니다. Apache Airflow 스케줄러 조정에 대한 자세한 내용은 Apache Airflow 문서 웹사이트의 스케줄러 성능 미세 조정을 참조하십시오.
파라미터
이 섹션에서는 Apache Airflow 스케줄러에 사용할 수 있는 구성 옵션과 해당 사용 사례에 대해 설명합니다.
- Apache Airflow v2
-
버전 |
구성 옵션 |
기본값 |
설명 |
사용 사례 |
v2
|
celery.sync_parallelism
|
1
|
Celery Executor가 작업 상태를 동기화하는 데 사용하는 프로세스 수입니다.
|
이 옵션을 사용하면 Celery Executor가 사용하는 프로세스를 제한하여 대기열 충돌을 방지할 수 있습니다. 기본적으로, 이 값은 CloudWatch Log에 작업 로그를 전송할 때 오류가 발생하지 않도록 1 로 설정됩니다. 값을 0 으로 설정하는 것은 최대 프로세스 수를 사용하는 것을 의미하지만, 작업 로그 전달 시 오류가 발생할 수 있습니다.
|
v2
|
scheduler.idle_sleep_time
|
1
|
스케줄러 ‘루프’에서 연속적인 DAG 파일 프로세싱 사이에 대기해야 하는 초 단위 시간입니다.
|
이 옵션을 사용하면 실행기에서 DAG 파싱 결과 검색, 작업 찾기, 대기열에 저장, 저장된 작업 실행을 완료한 후, 스케줄러가 대기 상태로 유지되는 시간을 늘려 스케줄러의 CPU 사용량을 줄일 수 있습니다. 이 값을 늘리면 Apache Airflow v2용 scheduler.parsing_processes 와 Apache Airflow v1용 scheduler.max_threads 환경에서 실행되는 스케줄러 스레드 수가 소모됩니다. 이렇게 하면 스케줄러의 DAG 파싱 용량이 줄어들어 DAG가 웹 서버에 표시되는 데 걸리는 시간이 늘어날 수 있습니다.
|
v2
|
scheduler.max_dagruns_to_create_per_loop
|
10
|
스케줄러 ‘루프’당 DagRuns를 생성할 수 있는 최대 DAG 수입니다.
|
이 옵션을 사용하면 스케줄러 ‘루프’의 최대 DAGrun 수를 줄여 작업 스케줄링에 필요한 리소스를 확보할 수 있습니다.
|
v2
|
scheduler.parsing_processes
|
기본적으로 (2 * number of vCPUs) - 1 공식을 사용하여 를 설정합니다.
|
스케줄러가 DAG를 스케줄링하기 위해 병렬로 실행할 수 있는 스레드 수입니다.
|
이 옵션을 사용하면 스케줄러가 DAG를 파싱하기 위해 병렬로 실행하는 프로세스 수를 줄여 리소스를 확보할 수 있습니다. DAG 파싱이 작업 스케줄링에 영향을 미치는 경우, 이 수치를 낮게 유지하는 것이 좋습니다. 사용자 환경의 vCPU 수보다 적은 값을 지정해야 합니다. 자세한 내용은 제한을 참조하십시오.
|
Limits
이 섹션에서는 스케줄러의 기본 파라미터를 조정할 때 고려해야 하는 제한에 대해 설명합니다.
- scheduler.parsing_processes, scheduler.max_threads
-
환경 클래스의 경우 vCPU당 스레드 2개가 허용됩니다. 환경 클래스의 스케줄러용으로 하나 이상의 스레드를 예약해야 합니다. 작업을 예약하는 데 지연이 발생하는 경우, 환경 클래스를 늘려야 할 수 있습니다. 예를 들어, 대규모 환경에는 스케줄러용으로 4개의 vCPU Fargate 컨테이너 인스턴스가 있습니다. 즉, 최대 7
개의 스레드를 다른 프로세스에 사용할 수 있습니다. 즉, 2개의 스레드 곱하기 4개의 vCPU에서 스케줄러 자체용으로 하나를 뺀 것입니다. scheduler.max_threads
및 scheduler.parsing_processes
에서 지정하는 값은 환경 클래스에 사용할 수 있는 스레드 수를 초과해서는 안 됩니다(아래 그림 참조).
-
mw1.small - 다른 프로세스의 경우 1
스레드를 초과해서는 안 됩니다. 나머지 스레드는 스케줄러용으로 예약되어 있습니다.
-
mw1.medium - 다른 프로세스의 경우 3
스레드를 초과해서는 안 됩니다. 나머지 스레드는 스케줄러용으로 예약되어 있습니다.
-
mw1.large - 다른 프로세스의 경우 7
스레드를 초과해서는 안 됩니다. 나머지 스레드는 스케줄러용으로 예약되어 있습니다.
DAG 폴더
Apache Airflow 스케줄러는 사용자 환경의 DAG 폴더를 지속적으로 스캔합니다. 포함된 모든 plugins.zip
파일, 또는 ‘airflow’ 가져오기 명령문이 포함된 Python(.py
) 파일 이어서, 나머지 모든 Python DAG 객체를 DagBag에 배치함으로써 스케줄러가 해당 파일을 처리하여 스케줄링이 필요한 작업(있는 경우)을 결정합니다. Dag 파일 구문 분석은 파일에 실행 가능한 DAG 객체가 포함되어 있는지 여부에 관계없이 수행됩니다.
파라미터
이 섹션에서는 DAG 폴더에 사용할 수 있는 구성 옵션과 해당 사용 사례에 대해 설명합니다.
- Apache Airflow v2
-
버전 |
구성 옵션 |
기본값 |
설명 |
사용 사례 |
v2
|
scheduler.dag_dir_list_interval
|
300초
|
DAG 폴더에서 새 파일을 검색해야 하는 초 단위 시간입니다.
|
이 옵션을 사용하면 DAG 폴더를 파싱하는 데 걸리는 초 단위 시간을 늘려 리소스를 확보할 수 있습니다. DAG 폴더에 파일이 너무 많아 total_parse_time metrics 의 파싱 시간이 오래 걸리면 이 값을 늘리는 것이 좋습니다.
|
v2
|
scheduler.min_file_process_interval
|
30초
|
스케줄러가 DAG를 파싱하고 DAG에 대한 업데이트가 반영되기까지 걸리는 초 단위 시간입니다.
|
이 옵션을 사용하면 스케줄러가 DAG를 파싱하기 전에 대기하는 초 단위 시간을 늘려 리소스를 확보할 수 있습니다. 예를 들면, 30 의 값을 지정하면 30초마다 DAG 파일 파싱이 이뤄집니다. 사용자 환경의 CPU 사용량을 줄이려면 이 수치를 높게 유지하는 것이 좋습니다.
|
DAG 파일
Apache Airflow 스케줄러 루프의 일부로 개별 DAG 파일을 구문 분석하여 DAG Python 객체를 추출합니다. Apache Airflow v2 이상에서는 스케줄러가 동시에 최대 수의 파싱 프로세스를 파싱합니다. 동일한 파일을 다시 파싱하려면 scheduler.min_file_process_interval
에 지정된 시간(초)이 경과해야 합니다.
파라미터
이 섹션에서는 Apache Airflow DAG 파일에 사용할 수 있는 구성 옵션과 해당 사용 사례에 대해 설명합니다.
- Apache Airflow v2
-
버전 |
구성 옵션 |
기본값 |
설명 |
사용 사례 |
v2
|
core.dag_file_processor_timeout
|
50초
|
DagFileProcessor의 DAG 파일 프로세싱 시간이 초과되기까지 걸리는 초 단위 시간입니다.
|
이 옵션을 사용하면 DAGFileProcessor 제한 시간이 초과될 때까지 걸리는 시간을 늘려 리소스를 확보할 수 있습니다. DAG 프로세싱 로그에 시간 초과가 발생하여 실행 가능한 DAG가 로드되지 않는 경우, 이 값을 늘리는 것이 좋습니다.
|
v2
|
core.dagbag_import_timeout
|
30초
|
Python 파일을 가져오기하는 데 걸리는 시간이 초과되기 까지의 초 단위 시간입니다.
|
이 옵션을 사용하면 Python 파일을 가져와서 DAG 객체를 추출하는 동안 스케줄러의 시간이 초과될 때까지 걸리는 시간을 늘려 리소스를 확보할 수 있습니다. 이 옵션은 스케줄러 '루프'의 일부로 처리되며 core.dag_file_processor_timeout 에 지정된 값보다 작은 값을 포함해야 합니다.
|
v2
|
core.min_serialized_dag_update_interval
|
30
|
데이터베이스의 직렬화된 DAG가 업데이트되기까지 걸리는 초 단위 최소 시간입니다.
|
이 옵션을 사용하면 데이터베이스의 직렬화된 DAG가 업데이트기까지 걸리는 초 단위 시간을 늘려 리소스를 확보할 수 있습니다. DAG가 많거나 DAG가 복잡한 경우, 이 값을 늘리는 것이 좋습니다. 이 값을 늘리면 DAG가 직렬화될 때 스케줄러와 데이터베이스의 부하가 줄어듭니다.
|
v2
|
core.min_serialized_dag_fetch_interval
|
10
|
직렬화된 DAG가 DagBag에 이미 로드되어 있는 경우 데이터베이스에서 다시 페치되는 데 걸리는 초 단위 시간입니다.
|
이 옵션을 사용하면 직렬화된 DAG를 다시 페치하는 초 단위 시간을 늘려 리소스를 확보할 수 있습니다. 데이터베이스 ‘쓰기’ 속도를 줄이려면 이 값이 core.min_serialized_dag_update_interval 에 지정된 값보다 커야 합니다. 이 값을 늘리면 DAG가 직렬화될 때 웹 서버와 데이터베이스의 부하가 줄어듭니다.
|
Tasks
Apache Airflow 스케줄러와 작업자는 모두 대기열 생성 및 대기열 제거 작업에 관여합니다. 스케줄러는 파싱된 작업을 없음 상태에서 예약됨 상태로 전환하여 스케줄링할 수 있습니다. 실행기는 Fargate의 스케줄러 컨테이너에서도 실행되며, 해당 작업을 대기열에 넣고 상태를 대기 상태로 설정합니다. 작업자가 작업 용량을 확보하면, 대기열에서 작업을 가져와 상태를 실행 중으로 설정합니다. 그러면 작업의 성공 또는 실패 여부에 따라 상태가 성공 또는 실패로 변경됩니다.
파라미터
이 섹션에서는 Apache Airflow 작업에 사용할 수 있는 구성 옵션과 해당 사용 사례에 대해 설명합니다.
Amazon MWAA에서 재정의하는 기본 구성 옵션은 빨간색
으로 표시됩니다.
- Apache Airflow v2
-
버전 |
구성 옵션 |
기본값 |
설명 |
사용 사례 |
v2
|
core.parallelism
|
(maxWorkers * maxCeleryWorkers) / schedulers * 1.5 를 기반으로 동적으로 설정합니다.
|
‘실행 중’ 상태를 가질 수 있는 작업 인스턴스의 최대 수입니다.
|
이 옵션을 사용하면 동시에 실행할 수 있는 작업 인스턴스 수를 늘려 리소스를 확보할 수 있습니다. 지정된 값은 가용한 작업자 수에 작업자의 작업 밀도를 ‘곱한’ 값이어야 합니다. 이 값은 ‘실행 중’ 또는 ‘대기 중’ 상태에서 멈춘 작업이 많은 경우에만 변경하는 것이 좋습니다.
|
v2
|
core.dag_concurrency
|
10000
|
각 DAG에서 동시에 실행할 수 있는 작업 인스턴스의 수입니다.
|
이 옵션을 사용하면 동시에 실행할 수 있는 작업 인스턴스 수를 늘려 리소스를 확보할 수 있습니다. 예를 들어, 10개의 병렬 작업이 있는 100개의 DAG가 있고, 모든 DAG를 동시에 실행하고자 하는 경우, 가용 작업자 수에 celery.worker_concurrency 에 있는 작업자의 작업 밀도를 ‘곱한’ 값을 DAG 수(예: 100)로 나누어 최대 병렬도를 계산할 수 있습니다.
|
v2
|
core.execute_tasks_new_python_interpreter
|
True
|
Apache Airflow가 상위 프로세스를 분기하여 작업을 실행할 것인지 아니면 새 Python 프로세스를 생성하여 작업을 실행할 것인지를 결정합니다. |
True 로 설정하면, Apache Airflow는 플러그인에 대한 변경 사항을 작업을 실행하기 위해 생성된 새로운 Python 프로세스로 인식합니다.
|
v2
|
celery.worker_concurrency
|
N/A
|
Amazon MWAA는 이 옵션에 대한 Airflow 기본 설치를 재정의하여 자동 확장 구성 요소의 일부로서 작업자를 크기를 조정합니다.
|
이 옵션에 지정된 모든 값은 무시됩니다. |
v2
|
celery.worker_autoscale
|
mw1.small - 5,0
mw1.medium - 10,0
mw1.Large - 20,0
mw1.xlarge - 40,0
mw1.2xlarge - 80,0
|
작업자 태스크의 동시성
|
이 옵션을 사용하면 작업자의 maximum , minimum 태스크 동시성을 줄여 리소스를 확보할 수 있습니다. 작업자는 충분한 리소스가 있는지 여부에 관계없이 구성된 최대 maximum 개의 동시 태스크를 수락합니다. 리소스가 충분하지 않은 상태에서 태스크를 예약하면 작업이 즉시 실패합니다. 리소스를 많이 사용하는 태스크의 경우, 이 값을 기본값보다 작게 줄여 작업당 용량을 늘릴 수 있도록 변경하는 것이 좋습니다.
|