2

Spark 2.0.2를 사용하여 Spark 응용 프로그램을 실행하기 위해 10 개의 노드가있는 AWS EMR 5.2 인스턴스 m4.2x 대형을 사용하고있었습니다. 나는 maximizeResourceAllocation=true의 재산을 사용했다. 나는 다음과 같은 속성을 본 곳 불꽃은 defaults.conf에서 본 : .I 만 이해Amazon EMR에서 Spark를 사용할 때 드라이버 메모리 및 실행자 메모리 크기가 어떻게됩니까?

spark.executor.instances   10 
spark.executor.cores    16 
spark.driver.memory    22342M 
spark.executor.memory   21527M 
spark.default.parallelism  320 

원사를 site.xml에서를, 내가 yarn.nodemanager.resource.memory-mb=24576 (24기가바이트)를 보았다 (10)에 spark.executor.instances 세트로 나는 10 개의 노드 클러스터를 사용하고있다. 하지만 아무도 내게 어떻게 다른 속성이 드라이버 메모리 & 실행 메모리가 계산되었습니다처럼 설정되었습니다 설명 할 수 있습니까? 또한 maximizeResourceAllocation=true의 속성을 사용했습니다. 어떻게 메모리에 영향을 줍니까?

답변

3

나는 Spark in Action 책을 제안합니다. 간략하게, executor는 드라이버에 의해 태스크가 전달되는 컨테이너입니다. 클러스터의 한 노드는 자원 할당에 따라 여러 실행 프로그램을 시작할 수 있습니다. CPU 할당은 실행중인 작업을 병렬로 수행 할 수 있으므로 실행 프로그램에 더 많은 코어를 갖는 것이 좋습니다. 따라서 더 많은 CPU 코어가 더 많은 작업 슬롯을 의미합니다. 실행 프로그램에 대한 메모리 할당은 YARN 컨테이너 메모리에 적합한 정상적인 방법으로 이루어져야합니다. YARN 컨테이너 메모리> = executor 메모리 + executor 메모리 오버 헤드.

스파크는 캐시 된 데이터 저장소 및 임시 셔플 데이터를 위해 해당 메모리의 일부를 예약합니다. spark.storage.memoryFraction (기본값 0.6) 및 spark.shuffle.memoryFraction (기본값 0.2) 매개 변수를 사용하여 이들에 대한 힙을 설정하십시오. Spark에서 측정하고 제한하기 전에 힙 부분이 커질 수 있으므로 spark.storage.safetyFraction (기본값은 0.9) 및 spark.shuffle.safetyFraction (기본값은 0.8)이라는 두 가지 추가 안전 매개 변수를 설정해야합니다. 안전 매개 변수는 지정된 양만큼 메모리 비율을 낮 춥니 다. 기본적으로 저장소에 사용되는 힙의 실제 부분은 0.6 × 0.9 (안전 분율과 저장소 메모리 비율)이며 54 %입니다. 비슷하게, 셔플 데이터에 사용 된 힙 부분은 0.2 × 0.8 (안전 분수 × 셔플 메모리 분수)이며, 이는 16 %입니다. 그런 다음 작업을 실행하는 데 필요한 다른 Java 객체 및 자원에 대해 30 %의 힙을 예약합니다. 그러나 20 %에 불과합니다.

드라이버는 실행 프로그램 간의 단계와 작업을 조정합니다. 유언 집행자의 결과는 운전자에게 반환되므로 운전자를위한 기억도 모든 집행자로부터 모든 데이터를 수집 할 수 있도록 처리해야합니다.

+0

'maximizeResourceAllocation = true' 속성을 설정하지 않은 경우의 차이점은 무엇입니까 ?? –

+0

전체 클러스터 리소스를 계산하고 계산 결과를 기반으로 기본 구성을 설정하는 데 사용됩니다. 이 옵션을 활성화하지 않으면 일부 매개 변수가'spark.default.parallelism = 100'과 같이 기본값으로 설정됩니다. – FaigB