2013-03-02 3 views
1

Amazon EC2 m1.small 인스턴스에서 MapReduce 단어 계산 예제를 테스트 중입니다. 아마존 명령 행 시작 안내서를 따라 왔습니다.Hadoop on EC2 : 슬레이브 수를 늘릴 때 성능이 향상되지 않습니다.

함이 명령을 사용하여/ec2hadoop 출시 클러스터 테스트 2

나는 2 개 슬레이브 노드가있다. (총 3 개의 인스턴스가 실행 중임) 그러면 master 노드에 로그인하여 hadoop 프로그램 (jar 파일에 번들로 묶음)을 실행할 수 있습니다. 35 분이 걸렸습니다.

는 확장 성 실험을 위해, 나는 4 개 인스턴스 놀랍게도

빈/ec2hadoop 출시 클러스터 테스트 4

를 사용하여 동일한 프로그램을 실행, 나는 성능에 어떤 이득을 보지 않았다. MapReduce 응용 프로그램은 거의 동일한 시간 (33 분)이 걸렸습니다.

어디에 문제가 있습니까? 허용되는 동작입니까?

In mapred-site.xml 
mapred.tasktracker.map.tasks.maximum is set to 1 
mapred.tasktracker.reduce.tasks.maximum is set to 1 

모든 의견을 환영합니다.

+0

몇 개의 입력 파일과 크기가 있습니까? tasktracker web ui의 컴퓨터로 작업 배포를 검토 했습니까? 지도 작업이 모든 노드에서 실행 되었습니까? 아니면 단일 노드에서 실행 되었습니까? – harpun

+0

s3n textData 파일의 입력 파일 10.내가 기계에 작업의 분포를 확인하지 못했 .. 어떻게 그 tasktracker 웹 UI를 확인하는 방법을 모르겠다 .. 어떻게 할 검색 할 것인가? 또한 Hadoop 프레임 워크는 * map * 작업을 위해 모든 슬레이브를 사용하지만지도 작업이 모든 노드 또는 단일 노드에서 실행되는지 여부를 확신하지 못한다고 가정합니다. – Trojosh

+0

미안하지만, 저는 Jobtracker 웹 UI를 의미했습니다. 일반적으로 'http : // : 50030 /'UI에서 완료된 작업에 대한 다양한 세부 정보를 확인할 수 있습니다. 일부 포인터에 대해서는 [Hadoop 모니터링] (http://docs.hortonworks.com/CURRENT/index.htm#Monitoring_HDP/Understanding_Monitoring_For_Hadoop/Key_Information_Resources_For_Monitoring_Hadoop.htm)을 참조하십시오. – harpun

답변

0

클러스터가 커지면서 점점 줄어드는 축소 기가 늘어남에 따라 Hadoop은 선형 확장 성을 보여야합니다.
결과의 근본 원인은 단일 감속기라고 생각합니다. 모든 맵퍼의 결과가 단일 감속기로 전달되면 클러스터 크기의 성능 향상을 제한합니다. 당신이 reducers의 수를 4로 설정하면 (클러스터의 노드 수에 의해) 이득을보아야합니다.
또한 - Small 인스턴스에 대해 효율적인 작업을 수행 할 수 있는지 의심 스럽습니다. 메모리가 한계에 가까워지고 스와핑은 모든 성능을 시작하고 종료 할 수 있습니다. 또한 이러한 인스턴스는 1GB 이더넷의 극히 일부를 차지하게되며 제한 요소가 될 수도 있습니다.

+0

어디에서 감속기의 수를 설정해야합니까? (3) mapred.tasktracker.reduce.tasks.maximum (2) 명령 줄 옵션 -dmapred.reduce.tasks = 2 또는 (3) 프로그램의 mapred-sites.xml에서 (1) jobConf.setNumReduceTasks (n)), 어느 나에게 자바 힙 공간 오류를 제공합니다. (2)는 감속기의 수를 변경하지 않습니다. 정확히 구성해야 할 부분에 대해 조금 설명해 주시겠습니까? – Trojosh

+0

(2), (3)은 맞지만 (2) 특수 도구 인터페이스 (http://stackoverflow.com/questions/2115292/run-hadoop-job-without-using-jobconf)를 구현해야합니다. jobConf.setNumReduceTasks (n)가 확실히 작동해야합니다. 메모리 부족 - 당신을 협박해서는 안됩니다. 감속기의 수를 4 (옵션 (3))로 설정하고 (1) (1) –

+0

으로 설정하십시오. 메모리 부족은 작은 인스턴스에 대해 미세 조정으로 해결할 수 있지만 더 큰 인스턴스를 사용하는 것이 좋습니다. –

0

구성에 따라 노드 당 최대 1 개의 맵과 1 개의 작업을 줄일 수 있습니다. 실행중인 작업 유형에 따라 이러한 매개 변수를 노드의 코어 수로 설정하는 것이 유용 할 수 있습니다. 특히지도/삭감 작업이 계산 상으로 비싸다.

귀하의 의견에 귀하가 말씀 드렸듯이 감축 단계가 작업의 전체 성과를 좌우하는 경우이 부분에 초점을 맞추어야합니다. Hadoop에서는 생성 된 출력 파일의 수에 직접적인 영향을주기 때문에 작업의 축소 작업 수를 작업 구성에서 지정할 수 있습니다.

하나의 축소 작업을 수행하면 단일 출력 파일이 제공됩니다. N 작업을 줄이면 N 개의 출력 파일이됩니다. 각 파일에는 키순으로 정렬 된 데이터가 들어 있습니다. 또한지도 작업에서 지정된 키에 대한 모든 데이터를 가져 오는 작업을 줄일 수 있습니다.

간단히 말해서 축소 작업의 수를 늘리면 작업의 전반적인 성능이 향상되지만 여러 출력 파일이 생성됩니다. 필요에 따라이 파일은 단일 축소 작업처럼 동일한 단일 출력 파일을 얻도록하기 위해 두 번째 맵 축소 작업 (또는 Hadoop 외부)에서 키에 따라 병합되고 정렬되어야합니다.

+0

이제 작업을 실행하기 위해 -D mapred.reduce.tasks = 4 옵션을 사용 중입니다. 그러나 여전히 같은 결과입니다. 여기에 언급 된대로 jobConf.setNumReduceTasks()를 사용하여 설정해야합니까 : http://stackoverflow.com/questions/6885441/setting-the-number-of-map-tasks-and-reduce-tasks – Trojosh

+0

@Trojosh : use '-Dmapred.reduce.tasks = 4' (공백없이). 또한이 매개 변수를 무시하거나 무시할 수 있기 때문에 실행중인 작업의 종류에 따라 다릅니다. 자신의 소스 코드를 wordcount로 실행하는 경우 가장 좋은 방법은 말한 것처럼 jobConf.setNumReduceTasks()를 설정하는 것입니다. 또한 명령 줄 매개 변수를 자신의 응용 프로그램에 전달할 수있게하려면 http://stackoverflow.com/questions/11722424/hadoop-reduce-task-running-even-after-telling-on-command- line-as-d-mapred-reduc – harpun

+0

reduce.tasks = 4를 주면 OutofMemoryError가 발생합니다. 내가 dfs.replication = 2 (데이터 노드 = 2를 의미합니까?) 및 최대 노드 수와 노드 당 작업 수를 줄일 수 있기 때문일 수 있습니다. 따라서이 값은 (0.95 * 1 * 2)와 (1.75 * 1 * 2) 사이 여야하며 4는 둘 다 – Trojosh

관련 문제