개발하면서/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);
반응형