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 Spark 런타임 버전
1.1.12 이상 및 2.0.20 이상에서 사용할 수 있습니다. |
false |
Spark 동적 할당 측정항목
Spark 일괄 워크로드는 Spark 동적 리소스 할당과 관련하여 아래 나열된 측정항목을 생성합니다(Spark 측정항목에 대한 추가 정보는 모니터링 및 계측 참조).
측정항목 | 설명 |
---|---|
maximum-needed |
현재 실행 중인 모든 태스크와 대기 중인 태스크를 충족하는 데 필요한 최대 실행자 수입니다. |
running |
태스크를 실행하는 실행자 수입니다. |
Spark 동적 할당 문제 및 솔루션
ExecutorDeadException으로 인한 가져오기 실패 예외
원인: Spark 동적 할당이 실행자를 축소하면 셔플 파일이 라이브 실행자로 마이그레이션됩니다. 그러나 실행자의 Spark 감소기 태스크를 감소기 태스크가 시작될 때 Spark 드라이버가 설정한 위치에서 셔플 출력을 가져오기 때문에, 셔플 파일이 마이그레이션되면 감소기가 계속해서 사용 중단된 실행자에서 셔플 출력을 가져오려고 시도하기 때문에
ExecutorDeadException
및FetchFailedException
오류를 유발할 수 있습니다.솔루션: Spark를 위한 서버리스 Dataproc 일괄 워크로드를 실행할 때
spark.reducer.fetchMigratedShuffle.enabled
를true
로 설정하여 셔플 위치 다시 가져오기를 사용 설정하세요(Spark 일괄 워크로드 속성 설정 참조) 이 속성을 사용 설정한 경우 감소된 태스크는 사용 중단된 실행자 가져오기가 실패한 후 드라이버에서 셔플 출력 위치를 다시 가져옵니다.