클러스터 용량 규모 조정
작업이 너무 오래 걸리지만 실행기가 충분한 리소스를 소비하고 Spark가 사용 가능한 코어에 비해 대량의 태스크를 생성하는 경우 클러스터 용량을 조정하는 방법을 고려합니다. 적절한지 평가하려면 다음 지표를 사용합니다.
CloudWatch 지표
-
CPU 로드 및 메모리 사용률을 확인하여 실행기가 충분한 리소스를 사용하고 있는지 확인합니다.
-
작업 실행 시간을 확인하여 처리 시간이 너무 길어 성능 목표를 달성할 수 없는지 평가합니다.
다음 예제에서는 4개의 실행기가 97%를 초과하는 CPU 로드에서 실행되고 있지만 약 3시간 후에도 처리가 완료되지 않습니다.
참고
CPU 부하가 낮으면 클러스터 용량을 조정해도 도움이 되지 않을 수 있습니다.
Spark UI
작업 탭 또는 단계 탭에서 각 작업 또는 단계의 태스크 수를 볼 수 있습니다. 다음 예제에서 Spark는 58100 태스크를 생성했습니다.
실행기 탭에서 총 실행기 및 태스크 수를 볼 수 있습니다. 다음 스크린샷에서 각 Spark 실행기에는 4개의 코어가 있으며 4개의 태스크를 동시에 수행할 수 있습니다.
이 예제에서 Spark 태스크 수(58100)는 실행기가 동시에 처리할 수 있는 16개의 태스크(4개의 실행기 × 4개의 코어)보다 훨씬 큽니다.
이러한 증상이 관찰되면 클러스터 규모 조정을 고려합니다. 다음 옵션을 사용하여 클러스터 용량을 조정할 수 있습니다.
-
AWS Glue Auto Scaling 활성화 - Auto Scaling은 AWS Glue 버전 3.0 이상의 AWS Glue 추출, 전환, 적재(ETL) 및 스트리밍 작업에 사용할 수 있습니다. AWS Glue는 각 단계의 파티션 수 또는 작업 실행 시 마이크로배치가 생성되는 속도에 따라 클러스터에서 작업자를 자동으로 추가하고 제거합니다.
오토 스케일링이 활성화되어 있더라도 작업자 수가 증가하지 않는 상황이 관찰되면 작업자를 수동으로 추가하는 방법을 고려합니다. 그러나 한 단계에 대해 수동으로 규모를 조정하면 이후 단계에서 많은 작업자가 유휴 상태가 되어 성능이 개선되지 않으면서 비용이 더 많이 들 수 있습니다.
오토 스케일링을 활성화하면 CloudWatch 실행기 지표에서 실행기 수를 볼 수 있습니다. 다음 지표를 사용하여 Spark 애플리케이션의 실행기 수요를 모니터링합니다.
-
glue.driver.ExecutorAllocationManager.executors.numberAllExecutors -
glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors
지표에 대한 자세한 내용은 Amazon CloudWatch를 사용하여 AWS Glue 지표 모니터링을 참조하세요.
-
-
스케일 아웃: AWS Glue 작업자 수 증가 - AWS Glue 작업자 수를 수동으로 늘릴 수 있습니다. 유휴 작업자를 관찰할 때까지만 작업자를 추가합니다. 이때 작업자를 더 추가하면 결과가 개선되지 않고 비용이 증가합니다. 자세한 내용은 태스크 병렬화를 참조하세요.
-
스케일 업: 더 큰 작업자 유형 사용 - 코어, 메모리 및 스토리지가 더 많은 작업자를 사용하도록 AWS Glue 작업자의 인스턴스 유형을 수동으로 변경할 수 있습니다. 작업자 유형이 클수록 메모리 집약적인 데이터 변환, 왜곡된 집계, 페타바이트 규모의 데이터와 관련된 엔터티 감지 검사 등 집약적인 데이터 통합 작업을 수직적으로 스케일링하고 실행할 수 있습니다.
작업 쿼리 계획이 상당히 크기 때문에 Spark 드라이버에 더 큰 용량이 필요한 경우에도 스케일 업이 도움이 됩니다. 작업자 유형 및 성능에 대한 자세한 내용은 AWS 빅 데이터 블로그 게시물 Scale your AWS Glue for Apache Spark jobs with new larger worker types G.4X and G.8X
를 참조하세요. 또한 더 큰 작업자를 사용하면 필요한 총 작업자 수를 줄일 수 있으므로 조인과 같은 집약적인 작업에서 셔플을 줄여 성능이 개선됩니다.