-
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);
반응형