

# AWS Glue에 Auto Scaling 사용
<a name="auto-scaling"></a>

AWS Glue ETL, 대화형 세션 및 스트리밍 작업에 오토 스케일링을 AWS Glue 버전 3.0 이상에서 사용할 수 있습니다.

Auto Scaling을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
+ AWS Glue는 각 스테이지의 병렬 처리나 작업 실행의 마이크로 배치에 따라 클러스터의 작업자를 자동으로 추가하고 제거합니다.
+ AWS Glue ETL 작업에 대해 할당할 작업자 수를 실험하고 결정할 필요가 줄어듭니다.
+ 최대 작업자 수를 선택하면 AWS Glue에서 워크로드에 적합한 크기의 리소스를 선택합니다.
+ AWS Glue Studio의 작업 실행 세부 정보 페이지에서 CloudWatch 지표를 살펴보면 클러스터 크기가 작업 실행 중에 어떻게 변경되는지 확인할 수 있습니다.

AWS Glue ETL 및 스트리밍 작업에 오토 스케일링을 사용하면 AWS Glue 작업의 컴퓨팅 리소스를 온디맨드로 스케일 아웃 및 스케일 인할 수 있습니다. 온디맨드 확장은 처음에 작업 실행 시작 시 필요한 컴퓨팅 리소스만 할당하고 작업 중 수요에 따라 필요한 리소스를 프로비저닝하는 데 도움이 됩니다.

오토 스케일링은 작업 중 AWS Glue 작업 리소스의 동적 스케일 인도 지원합니다. 작업 실행 중 Spark 애플리케이션에서 더 많은 실행기를 요청하면 클러스터에 더 많은 작업자가 추가됩니다. 실행기가 활성 계산 태스크 없이 유휴 상태인 경우 실행자와 해당 작업자가 제거됩니다.

오토 스케일링이 Spark 애플리케이션의 비용 및 사용률에 도움이 되는 일반적인 시나리오는 다음과 같습니다.
+  Amazon S3에서 많은 수의 파일을 나열하거나 실행기가 비활성 상태일 때 로드를 수행하는 Spark 드라이버 
+  과도한 프로비저닝으로 인해 소수의 실행기로만 실행되는 Spark 단계 
+  Spark 단계에서 데이터 스큐 또는 균일하지 않은 계산 수요 

## 요구 사항
<a name="auto-scaling-requirements"></a>

Auto Scaling은 AWS Glue 버전 3.0 이상에서만 사용 가능합니다. Auto Scaling을 사용하려면 [마이그레이션 가이드](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-30.html)에 따라 기존 작업을 AWS Glue 버전 3.0 이상으로 마이그레이션하거나 AWS Glue 버전 3.0 이상에서 새 작업을 생성합니다.

Auto Scaling은 `G.1X`, `G.2X`, `G.4X`, `G.8X`, `G.12X`, `G.16X`, `R.1X`, `R.2X`, `R.4X`, `R.8X` 또는 `G.025X`(스트리밍 작업만 해당) 작업자 유형을 포함하는 AWS Glue 작업에서 사용 가능합니다. 표준 DPU는 Auto Scaling에서 지원되지 않습니다.

## AWS Glue Studio에서 Auto Scaling 사용
<a name="auto-scaling-enabling"></a>

AWS Glue Studio의 **작업 세부 정보** 탭에서 유형을 **Spark** 또는 **Spark 스트리밍**으로, **Glue 버전**을 **Glue 3.0** 이상으로 선택하세요. 그러면 **작업자 유형** 아래에 확인란이 표시됩니다.
+ **작업자 수 자동 크기 조정(Automatically scale the number of workers)** 옵션을 선택합니다.
+ **최대 작업자 수(Maximum number of workers)**를 설정하여 작업 실행에 판매할 수 있는 최대 작업자 수를 정의합니다.

![AWS Glue Studio에서 Auto Scaling 사용 및 구성.](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/auto-scaling-enable-studio.png)


## AWS CLI 또는 SDK를 사용하여 Auto Scaling 사용 설정
<a name="auto-scaling-enabling-cli-sdk"></a>

AWS CLI에서 Auto Scaling을 사용 설정하여 작업을 실행하려면, 다음 구성으로 `start-job-run`을 실행합니다.

```
{
    "JobName": "<your job name>",
    "Arguments": {
        "--enable-auto-scaling": "true"
    },
    "WorkerType": "G.2X", // G.1X, G.2X, G.4X, G.8X, G.12X, G.16X, R.1X, R.2X, R.4X, and R.8X are supported for Auto Scaling Jobs
    "NumberOfWorkers": 20, // represents Maximum number of workers
    ...other job run configurations...
}
```

ETL 작업 실행이 완료되면 `get-job-run`을 호출하여 DPU 초 단위로 작업 실행의 실제 리소스 사용량을 확인할 수도 있습니다. 참고: 새 필드 **DPUSeconds**는 오토 스케일링이 활성화된 AWS Glue 4.0 이상의 배치 작업에만 표시됩니다. 이 필드는 스트리밍 작업에는 지원되지 않습니다.

```
$ aws glue get-job-run --job-name your-job-name --run-id jr_xx --endpoint https://glue.us-east-1.amazonaws.com --region us-east-1
{
    "JobRun": {
        ...
        "GlueVersion": "3.0",
        "DPUSeconds": 386.0
    }
}
```

동일한 구성의 [AWS Glue SDK](https://docs.aws.amazon.com/glue/latest/webapi/API_StartJobRun.html)를 사용하여 Auto Scaling으로 작업 실행을 구성할 수도 있습니다.

## 대화형 세션을 사용하여 Auto Scaling 활성화
<a name="auto-scaling-enabling-interactive-sessions"></a>

 대화형 세션으로 AWS Glue 작업을 빌드할 때 Auto Scaling을 활성화하려면 [AWS Glue 대화형 세션 구성](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-magics.html)을 참조하세요.

## 팁 및 고려 사항
<a name="auto-scaling-tips-and-considerations"></a>

 AWS Glue 오토 스케일링 미세 조정을 위한 팁 및 고려 사항: 
+  최대 작업자 수의 초기 값에 대한 아이디어가 없는 경우 [예상 AWS Glue DPU](https://docs.aws.amazon.com/whitepapers/latest/aws-glue-best-practices-build-performant-data-pipeline/building-a-cost-effective-data-pipeline.html)에 설명된 대략적인 계산부터 시작할 수 있습니다. 볼륨이 매우 적은 데이터의 경우 최대 작업자 수로 너무 큰 값을 구성해서는 안 됩니다.
+  AWS Glue 오토 스케일링은 작업에 구성된 최대 DPU 수(최대 작업자 수 및 작업자 유형으로 계산됨)를 기반으로 `spark.sql.shuffle.partitions` 및 `spark.default.parallelism`을 구성합니다. 이러한 구성에서 고정 값을 선호하는 경우 다음 작업 파라미터로 이러한 파라미터를 덮어쓸 수 있습니다.
  +  **키**: `--conf` 
  +  **값**: `spark.sql.shuffle.partitions=200 --conf spark.default.parallelism=200` 
+  스트리밍 작업의 경우 기본적으로 AWS Glue는 마이크로 배치 내에서 오토 스케일링을 수행하지 않으며 오트 스케일링을 시작하려면 여러 마이크로 배치가 필요합니다. 마이크로 배치 내에서 자동 오토 스케일링을 활성화하려면 `--auto-scale-within-microbatch`를 제공하세요. 자세한 내용은 [작업 파라미터 참조](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html#job-parameter-reference)를 참조하세요.

## Amazon CloudWatch 지표로 Auto Scaling 모니터링
<a name="auto-scaling-monitor-cloud-watch"></a>

CloudWatch 실행기 지표는 Auto Scaling을 사용하는 경우 AWS Glue 3.0 이상 작업에서 사용 가능합니다. 지표를 사용하여 Auto Scaling으로 사용 가능한 Spark 애플리케이션의 실행기 수요와 최적 사용량을 모니터링할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 지표를 사용하여 AWS Glue 모니터링](monitoring-awsglue-with-cloudwatch-metrics.md) 섹션을 참조하세요.

 또한 AWS Glue 관찰성 지표를 활용하여 리소스 사용률에 대한 인사이트를 얻을 수 있습니다. 예를 들어 `glue.driver.workerUtilization`을 모니터링하여 오토 스케일링을 사용하거나 사용하지 않고 실제로 사용된 리소스의 양을 모니터링할 수 있습니다. 또 다른 예로 `glue.driver.skewness.job` 및 `glue.driver.skewness.stage`를 모니터링하여 데이터 스큐 상태를 확인할 수 있습니다. 이러한 인사이트는 오토 스케일링을 활성화하고 구성을 미세 조정하는 데 도움이 됩니다. 자세한 내용은 [AWS Glue 관찰성 메트릭을 사용한 모니터링](monitor-observability.md)를 사용하여 모니터링을 참조하세요.
+ glue.driver.ExecutorAllocationManager.executors.numberAllExecutors
+ glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors

이러한 지표에 대한 자세한 내용은 [DPU 용량 계획 모니터링](monitor-debug-capacity.md) 섹션을 참조하세요.

**참고**  
 CloudWatch 실행자 지표는 대화형 세션에 사용할 수 없습니다.

![Amazon CloudWatch 지표로 Auto Scaling 모니터링.](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/auto-scaling-monitor-metrics.png)


## Amazon CloudWatch Logs를 사용하여 오토 스케일링 모니터링
<a name="auto-scaling-monitor-cloudwatch-logs"></a>

 대화형 세션을 사용하는 경우 연속 Amazon CloudWatch Logs를 활성화하고 로그에서 '실행자'를 검색하거나 Spark UI를 사용하여 실행자 수를 모니터링할 수 있습니다. 이렇게 하려면 `%%configure` 매직을 사용하여 `enable auto scaling`을 통해 연속 로깅을 활성화하세요.

```
%%configure{
    "--enable-continuous-cloudwatch-log": "true",
    "--enable-auto-scaling": "true"
}
```

 Amazon CloudWatch 로그 이벤트의 로그에서 '실행자'를 검색하세요.

![Amazon CloudWatch 지표로 Auto Scaling 모니터링.](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/cloudwatch-metrics-search-executor.png)


## Spark UI로 Auto Scaling 모니터링
<a name="auto-scaling-monitor-spark-ui"></a>

 Auto Scaling이 사용 가능한 경우 AWS Glue 작업의 수요에 따른 동적 확장 및 축소를 사용하여 추가 및 제거되는 실행기를 Glue Spark UI로 모니터링할 수도 있습니다. 자세한 내용은 [AWS Glue 작업을 위한 Apache Spark 웹 UI 사용 설정](monitor-spark-ui-jobs.md) 섹션을 참조하세요.

 Jupyter Notebook의 대화형 세션을 사용하는 경우 다음 매직을 실행하여 Spark UI와 함께 오토 스케일링을 활성화할 수 있습니다.

```
%%configure{
    "--enable-auto-scaling": "true",
    "--enable-continuous-cloudwatch-log": "true"
}
```

![Spark UI로 Auto Scaling 모니터링.](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/auto-scaling-monitor-spark-ui.png)


## Auto Scaling 작업 실행 DPU 사용량 모니터링
<a name="auto-scaling-monitor-dpu-usage"></a>

[AWS Glue Studio 작업 실행 보기](https://docs.aws.amazon.com/glue/latest/ug/monitoring-chapter.html)를 사용하여 Auto Scaling 작업의 DPU 사용량을 확인할 수 있습니다.

1. AWS Glue Studio 탐색 창에서 **모니터링**을 선택합니다. 모니터링 페이지가 표시됩니다.

1. 아래로 스크롤하여 작업 실행 차트로 이동합니다.

1. 원하는 작업 실행으로 이동하고 DPU 시간 열로 스크롤하여 특정 작업 실행의 사용량을 확인합니다.

## 제한 사항
<a name="auto-scaling-limitations"></a>

AWS Glue 스트리밍 Auto Scaling은 현재 `ForEachBatch` 외부에서 생성된 정적 DataFrame과 스트리밍 DataFrame의 조인을 지원하지 않습니다. `ForEachBatch` 내부에서 생성된 정적 DataFrame은 예상대로 작동합니다.