ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hadoop에서 wrong key class 에러 발생
    개발하면서/etc 2011. 7. 10. 09:49
    반응형

    job은 아래와 같고

    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);
    job.setMapOutputKeyClass(IntWritable.class);
    job.setMapOutputValueClass(Text.class);
    			
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    job.setJobName("sort");
    				
    job.setMapperClass(SortMaps.class);
    job.setCombinerClass(SortReducer.class);
    job.setReducerClass(SortReducer.class);

     

    Mapper, Reducer의 구현은 다음과 같다.

    public class SortMaps extends Mapper<LongWritable, Text, IntWritable, Text>{
    
    public class SortReducer extends Reducer<IntWritable, Text, Text, IntWritable> {

     

    그러나. . .아놔….. 아래와 같은 에러 발생.


    key 의 데이터 타입이 잘못 들어왔다는데. . . 오후에 이걸로 싸매다가, 결국 아래 블로그에서 해답을 찾았다.
    hadoop-wrong-key-class-exception

    아무 생각 없이 combine을 Reduce함수로 세팅하는데, Reduce함수의 Input과 Output이 다르면 문제가 발생
    그 이유는 combine의 Output이 reduce의 Input이 되기 때문이라고 한다.

    그래서 해결 방법은

    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);
    job.setMapOutputKeyClass(IntWritable.class);
    job.setMapOutputValueClass(Text.class);
    			
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    job.setJobName("sort");
    				
    job.setMapperClass(SortMaps.class);
    //job.setCombinerClass(SortReducer.class);
    job.setReducerClass(SortReducer.class);
    반응형

    댓글

Designed by Tistory.