이 문서에서는 Spark 자동 확장을 위한 서버리스 Dataproc에 대한 정보를 제공합니다. Spark 워크로드를 제출하면 Spark를 위한 서버리스 Dataproc가 실행자 수와 같은 워크로드 리소스를 동적으로 확장하여 워크로드를 효율적으로 실행합니다. Dataproc 서버리스 자동 확장은 기본 동작이며 Spark 동적 리소스 할당을 사용하여 워크로드 확장 여부, 방법, 시간을 결정합니다.
Dataproc Serverless 자동 확장 V2
Dataproc Serverless 자동 확장 버전 2(V2)는 Dataproc Serverless 워크로드를 관리하고 워크로드 성능을 개선하며 비용을 절감하는 데 도움이 되도록 기본 버전 1(V1)에 기능과 개선사항을 추가합니다.
- 비동기 노드 축소: 자동 확장 V2는 V1의 동기 축소를 비동기 축소로 대체합니다. Dataproc Serverless는 비동기 축소를 사용하여 모든 노드가 셔플 마이그레이션을 완료할 때까지 기다리지 않고 워크로드 리소스를 축소합니다. 즉, 천천히 축소되는 롱테일 노드가 확장을 차단하지 않습니다.
- 지능형 축소 노드 선택: 자동 확장 V2는 V1의 무작위 노드 선택을 가장 먼저 축소할 최적의 노드를 식별하는 지능형 알고리즘으로 바꿉니다. 이 알고리즘은 노드의 셔플 데이터 크기 및 유휴 시간과 같은 요소를 고려합니다.
- 구성 가능한 Spark 조용히 지원 중단 및 셔플 이전 동작: 자동 확장 V2를 사용하면 표준 Spark 속성을 사용하여 Spark 조용히 지원 중단 및 셔플 이전을 구성할 수 있습니다. 이 기능을 사용하면 맞춤설정된 Spark 속성과의 마이그레이션 호환성을 유지할 수 있습니다.
Dataproc Serverless 자동 확장 기능
기능 | Dataproc Serverless 자동 확장 V1 | Dataproc Serverless 자동 확장 V2 |
노드 다운스케일링 | 동기식 | 비동기식 |
다운스케일링을 위한 노드 선택 | 임의 | 지능형 |
Spark 단계적 해제 및 셔플 이전 | 구성할 수 없음 | 구성 가능 |
Spark 동적 할당 속성
다음 표에는 자동 확장 제어를 위해 배치 워크로드를 제출할 때 설정할 수 있는 Spark 동적 할당 속성이 나와 있습니다 (Spark 속성 설정 방법 참고).
속성 | 설명 | 기본 |
---|---|---|
spark.dataproc.scaling.version |
Dataproc Serverless Spark 자동 확장 버전입니다. 버전 1 또는 2 를 지정합니다(Dataproc Serverless 자동 확장 V2 참조). |
1 |
spark.dynamicAllocation.enabled |
워크로드에 따라 실행자 수를 늘리거나 줄이는 동적 리소스 할당을 사용할지 여부입니다.
값을 false 로 설정하면 워크로드에 대해 자동 확장이 사용 중지됩니다. 기본값: true |
true |
spark.dynamicAllocation.initialExecutors |
워크로드에 할당된 초기 실행자 수입니다. 워크로드가 시작된 후 자동 확장에 따라 활성 실행자 수가 변경될 수 있습니다.
최솟값은 2 이고 최댓값은 500 입니다. |
2 |
spark.dynamicAllocation.minExecutors |
워크로드를 축소할 수 있는 최소 실행자 수입니다.
최솟값은 2 입니다. |
2 |
spark.dynamicAllocation.maxExecutors |
워크로드를 확장할 수 있는 최대 실행자 수입니다.
최댓값은 2000 입니다. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Spark 워크로드의 수직 확장을 맞춤설정합니다. 0 에서 1 까지의 값을 허용합니다. 1.0 값은 최대 확장 기능을 제공하며 최대 동시 로드 수를 달성하는 데 도움이 됩니다. 0.5 값은 수직 확장 기능과 동시 로드 수를 최댓값의 절반으로 설정합니다. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
true 로 설정하면 Spark 동적 할당으로 인해 사용 중지된 실행자에서 가져오기에 실패한 후 Spark 드라이버에서 셔플 출력 위치를 가져올 수 있습니다. 이렇게 하면 사용 중단된 실행자에서 라이브 실행자로의 셔플 블록 마이그레이션으로 인한 ExecutorDeadException 오류가 감소하고 FetchFailedException 오류로 인한 스테이지 재시도가 줄어듭니다 (FetchFailedException으로 인한 ExecutorDeadException 참고).
이 속성은 Dataproc Serverless Spark 런타임 버전
1.1.12 이상 및 2.0.20 이상에서 사용할 수 있습니다. |
false |
Spark 동적 할당 측정항목
Spark 일괄 워크로드는 Spark 동적 리소스 할당과 관련하여 다음 측정항목을 생성합니다 (Spark 측정항목에 대한 추가 정보는 모니터링 및 계측 참고).
측정항목 | 설명 |
---|---|
maximum-needed |
실행 중인 모든 작업과 대기 중인 작업을 처리하기 위해 현재 부하에서 필요한 최대 실행자 수입니다. |
running |
태스크를 실행하는 실행자 수입니다. |
Spark 동적 할당 문제 및 해결 방법
FetchFailedException으로 인한 ExecutorDeadException
원인: Spark 동적 할당으로 실행자를 축소하면 셔플 파일이 실행 중인 실행자로 이전됩니다. 그러나 실행자의 Spark 감소기 태스크를 감소기 태스크가 시작될 때 Spark 드라이버가 설정한 위치에서 셔플 출력을 가져오기 때문에, 셔플 파일이 마이그레이션되면 감소기가 계속해서 사용 중단된 실행자에서 셔플 출력을 가져오려고 시도하기 때문에
ExecutorDeadException
및FetchFailedException
오류를 유발할 수 있습니다.솔루션: Spark를 위한 서버리스 Dataproc 일괄 워크로드를 실행할 때
spark.reducer.fetchMigratedShuffle.enabled
를true
로 설정하여 셔플 위치 다시 가져오기를 사용 설정하세요(Spark 일괄 워크로드 속성 설정 참조) 이 속성을 사용 설정하면 감소기 태스크는 사용 중단된 실행자에서 가져오기가 실패한 후 드라이버에서 셔플 출력 위치를 다시 가져옵니다.