Hello,
I'm experimenting with hadoop a few days now, but i'm stuck trying to output
different classes from map and reduce methods.
I have something like:
class test {
public static class Map extends MapReduceBase implements
Mapper<LongWritable, Text, Text, Text> {
public void map(LongWritable key, Text value, OutputCollector<Text,
Text> output, Reporter reporter) throws IOException {
(...)
output.collect(new Text(...), new Text(...));
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text,
Text, Text, IntWritable> {
public void reduce(Text key, Iterator<Text> values,
OutputCollector<Text, IntWritable> output, Reporter reporter) throws
IOException {
(...)
output.collect(key, new IntWritable(...));
}
}
}
the relevant part of my conf goes like:
JobConf conf = new JobConf(test.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
i keep getting this error:
08/02/28 01:52:47 INFO mapred.JobClient: map 50% reduce 0%
08/02/28 01:52:51 INFO mapred.JobClient: Task Id :
task_200802261545_0032_m_000001_0, Status : FAILED
java.io.IOException: wrong value class: org.apache.hadoop.io.IntWritable is
not class org.apache.hadoop.io.Text
at org.apache.hadoop.io.SequenceFile$Writer.append(SequenceFile.java:938)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$1.collect(MapTask.java
:414)
at org.myorg.WordCount$Reduce.reduce(WordCount.java:64)
at org.myorg.WordCount$Reduce.reduce(WordCount.java:49)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.combineAndSpill(
MapTask.java:439)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpillToDisk(
MapTask.java:418)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:604)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:193)
at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:1804)
if in the conf i switch this -> conf.setOutputValueClass(Text.class); (map's
output value type
for this -> conf.setOutputValueClass(IntWritable.class); (reduce's output
value type)
then i get this:
08/02/28 02:05:08 INFO mapred.JobClient: map 50% reduce 0%
08/02/28 02:05:12 INFO mapred.JobClient: Task Id :
task_200802261545_0033_m_000001_0, Status : FAILED
java.io.IOException: Type mismatch in value from map: expected
org.apache.hadoop.io.IntWritable, recieved org.apache.hadoop.io.Text
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java
:336)
at org.myorg.WordCount$Map.map(WordCount.java:43)
at org.myorg.WordCount$Map.map(WordCount.java:16)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:192)
at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:1804)
i'm just trying to modify slightly the wordcount example to fit my needs but
i keep getting this kind of errors.
Can somebody please point me the right direction?
Thank you
slitz