Hi all,

I am trying to specify different key/value classes for combiner and reducer
in my task, for example, I want the
mapper to output integer==>(integer,float) pair, and then the combiner
outputs integer==>some structure. Finally
the reducer takes in integer==>some structure and output null==>integer.
However, I got the following exception:

java.io.IOException: Spill failed
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer$Buffer.write(MapTask.java:597)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer$Buffer.write(MapTask.java:579)
    at java.io.DataOutputStream.writeInt(DataOutputStream.java:180)
    at org.apache.hadoop.io.IntWritable.write(IntWritable.java:42)
    at
org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:90)
    at
org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:77)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:437)
    at
edu.cmu.cs.lti.mapred.tasks.model1align.ModelOneTraining$MyMapper.map(ModelOneTraining.java:254)
    at
edu.cmu.cs.lti.mapred.tasks.model1align.ModelOneTraining$MyMapper.map(ModelOneTraining.java:1)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:47)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:219)
    at
org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:157)
Caused by: java.io.IOException: wrong value class:
edu.cmu.cs.lti.mapred.io.TTableColumnWritable is not class
edu.cmu.cs.lti.mapred.io.IntFloatPairWritable
    at
org.apache.hadoop.io.SequenceFile$Writer.append(SequenceFile.java:998)
    at
org.apache.hadoop.mapred.MapTask$CombineOutputCollector.collect(MapTask.java:1083)
    at
edu.cmu.cs.lti.mapred.tasks.model1align.ModelOneTraining$BinCombiner.reduce(ModelOneTraining.java:433)
    at
edu.cmu.cs.lti.mapred.tasks.model1align.ModelOneTraining$BinCombiner.reduce(ModelOneTraining.java:1)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer.combineAndSpill(MapTask.java:876)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:782)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$1600(MapTask.java:272)
    at
org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:707)

And I found nowhere to specify the combiner's input and output class. I
wonder is it possible to do so.

Best,
Qin

Reply via email to