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