2016-08-21 5 views
0

나는 hadoop을 사용하여 매우 초기 프로그래밍 작업을 수행하고 고전적인 단어 수 문제로 가고 있습니다.감속기가 70 %에서 멈춤

hdfs에 샘플 파일을 넣고 wordcount를 실행하려고했습니다. 매퍼는 잘 처리되지만, 감속기는 70 %로 고정되어 앞으로 움직이지 않습니다.

로컬 파일 시스템에서도이 문제를 시도했지만 동일한 문제가 발생했습니다.

무엇이 잘못 될 수 있습니까? 여기지도 및 감소되는 함수 -

public void map(LongWritable key, Text value, 
     OutputCollector<Text, IntWritable> output, Reporter reporter) 
     throws IOException { 
    // TODO Auto-generated method stub 
    String line = value.toString(); 

    String[] lineparts = line.split(","); 

    for(int i=0; i<lineparts.length; ++i) 
    { 
     output.collect(new Text(lineparts[i]), new IntWritable(1)); 
    } 


public void reduce(Text key, Iterator<IntWritable> values, 
       OutputCollector<Text, IntWritable> output, Reporter reporter) 
      throws IOException { 
     // TODO Auto-generated method stub 
     int count = 0; 
     while(values.hasNext()) 
     { 
      count=count+1; 
     } 
     output.collect(key , new IntWritable(count)); 
    } 

답변

3

당신은 기본적으로 무한 루프를 만드는, 그래서 당신은 당신의 반복자에 next()를 호출하지 않습니다. 보조 노트, 예를 들어이 단어를 구현 카운트 선호하는 방법으로


대신 값을 1하여 수를 증가하지만, 사용하지 않는 것입니다 :

IntWritable value = values.next(); 
count += value.get(); 

이 방법을 사용하면 다시 사용할 수 있습니다 ReducerCombiner으로 설정하여 각 매퍼에 대한 부분 카운트를 계산하고 지정된 매퍼에서 7 회 발생하는 ("wordX", 1) 대신 감속기에 emit ("wordX", 7)을 수행합니다. 결합 자에 대한 자세한 내용은 here을 참조하십시오.

+0

버그를 빨리 찾아 주셔서 감사합니다. – Gyan

관련 문제