2012-11-06 3 views
2

11 노드 클러스터에서 실행중인 EMR 작업이 있다고 가정 해보십시오. m1.small 마스터 노드와 10 m1.xlarge 슬레이브 노드.힙 메모리와 함께 병렬 맵퍼/리듀서의 수를 결정하는 방법은 무엇입니까?

이제 하나의 m1.xlarge 노드에 15GB의 RAM이 있습니다.

어떻게 설정할 수있는 평행 매퍼와 리듀서의 수를 결정할 것인가?

내 직업은 메모리를 많이 사용하기 때문에 점점 더 많은 힙을 JVM에 할당하고 싶습니다.

또 다른 관련 질문 : 우리는 다음과 같은 매개 변수를 설정하는 경우 :

<property><name>mapred.child.java.opts</name><value>-Xmx4096m</value></property> 
<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property> 
<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property> 
<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property> 

그래서이 4기가바이트이 ​​4 개 공정 (2 매퍼 및 2 감속기)에 의해 공유됩니다 또는 모두가 각각 4GB의 얻을 것이다?

답변

2

그들은 각각 4GB를 얻습니다.

작업 추적기 및 데이터 노드에 대한 힙 설정이 무엇인지 확인한 다음 자녀에게 할당 할 남은 메모리 양 (실제 매퍼/축소 기)을 확인해야합니다.

다음은 균형 잡힌 행동입니다. 더 많은 메모리가 필요하다면 매퍼/리듀서를 줄이는 것이 좋을 것입니다.

CPU에 몇 개의 코어가 있는지도 염두에 두십시오. 단일 코어에서 100 개의 맵 작업을 원하지 않습니다. 미세 조정하려면 시간이 지남에 따라 힙 사용과 CPU 사용률을 모니터링하여 노브를 조작 할 수 있습니다.

+0

좋아, m1.xlarge 위해 우리는 RAM 15GB의 가지고,하지만 난 다음 16 GB의 총 것, 2 매퍼 2 감속기라고 그래서,이 좋아해요 그리고 그것은 가장자리에있는 나쁜 생각이다? – Amar

+0

시도해보고 :-) OOME을 얻으면 힙 공간을 줄여야합니다. 이 시점에서 시행 착오입니다. 클러스터 설정을 테스트하는 좋은 방법은 contrib tera-sort mapreduce 작업을 사용하는 것입니다. 이렇게하면 런타임 기준을 벤치마킹 할 수 있습니다. 또한 io.sort.mb를 얼마나 많은 RAM이 있는지에 따라 더 높은 값으로 업데이트하려고 할 수 있습니다. –

관련 문제