개발하면서/etc
Hadoop에서 wrong key class 에러 발생
오산돌구
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);
반응형