wrong key class 오류

2011. 8. 11. 23:53 from Cloud/Hadoop
11/08/09 09:43:50 INFO mapred.JobClient: map 0% reduce 0%
11/08/09 09:44:00 INFO mapred.JobClient: Task Id : attempt_201108090850_0013_m_000000_0, Status : FAILED
java.io.IOException: wrong key class: class foo.bar.SomeClass is not class org.apache.hadoop.io.Text
    at org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:164)
    at org.apache.hadoop.mapred.Task$CombineOutputCollector.collect(Task.java:880)
    at org.apache.hadoop.mapred.Task$NewCombinerRunner$OutputConverter.write(Task.java:1201)
    at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
    at kr.bestbuyer.keyword.hadoop.wordCount.reducer.WordCountToDBReducer.reduce(WordCountToDBReducer.java:41)
    at kr.bestbuyer.keyword.hadoop.wordCount.reducer.WordCountToDBReducer.reduce(WordCountToDBReducer.java:1)
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176)
    at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1222)
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1265)
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1129)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:549)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:623)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)


Hadoop은 예외가 발생했을 때 좀 자세히 알려줬으면 좋겠다. key를 사용하는게 mapper도 있고, reducer도 있고, combiner도 있는데.. 어떤 key가 잘못 됐다는건지 말을 해줘야지 TㅅT 찾아보니 이 문제는 컴바이너 문제였다. 나도 아무 생각 없이 리듀서를 컴바이너로 사용했더니, 매퍼와 컴바이너의 output key가 달라서 발생한 문제다. 사실 컴바이너는 생각도 안 하고 있었는데.. =ㅅ=;;

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(SomeClass.class);
job.setOutputValueClass(IntWritable.class);

job.setMapperClass(RecommQueryCountMapper.class);
job.setCombinerClass(WordCountToDBReducer.class); // 요녀석 output key가 달라 문제였다.
job.setReducerClass(WordCountToDBReducer.class);


좋은 습관을 위해서라도 려듀서와 컴바이너는 따로 만들어서 쓰는게 좋으려나.. 근데 왜 output key/value 클래스 지정에 컴바이너는 없을까?? @ㅅ@

http://entireboy.egloos.com/4610360

'Cloud > Hadoop' 카테고리의 다른 글

libhdfs-C에서 hadoop사용  (0) 2011.09.02
테스트 MRUnit & Mockito  (0) 2011.09.01
wrong key class 오류  (0) 2011.08.11
Apache ZooKeeper 설치하기  (0) 2010.06.01
Nutch와 Hadoop  (0) 2010.05.31
Apache Lucene "데모 실행 및 분석"편  (0) 2009.12.17
Posted by 신공표 트랙백 0 : 댓글 0

댓글을 달아 주세요