valueclass

eqqqjvef  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(294)

我用mahout编写了一个mapreduce程序。Map输出值为 ClusterWritable 。当我在eclipse中运行代码时,它不会出错,但当我在terminal中运行jar文件时,它会显示异常:

java.io.IOException: wrong value class: org.apache.mahout.math.VectorWritable is not class org.apache.mahout.clustering.iterator.ClusterWritable
at org.apache.hadoop.io.SequenceFile$Writer.append(SequenceFile.java:988)
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat$1.write(SequenceFileOutputFormat.java:74)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:498)
at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
at org.apache.mahout.clustering.canopy.CanopyMapper.cleanup(CanopyMapper.java:59)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
at org.apache.hadoop.mapred.Child.main(Child.java:170)

map中的输出代码是:

context.write(new Text(), new ClusterWritable());

但我不知道为什么它说值类型是 VectorWritable .

1yjd4xko

1yjd4xko1#

正在运行的mapper导致上面的stacktrace是mahout的canopymapper,而不是您编写的自定义Map器。canopymapper.cleanup方法正在输出(键:text,值:vectorwritable)。请参见canopymapper.java
另请参阅canopydriver.java及其buildclustersmr方法,其中配置了mr作业、mapper、reducer和适当的输出键/值类。
您没有说明,所以我猜您在数据流管道中使用了多个mr作业。检查管道中每个作业的输出是否为管道中下一个作业的有效/预期输入。考虑使用级联/烫伤来定义数据流(请参见http://www.slideshare.net/melrief/scalding-programming-model-for-hadoop)
考虑使用mahout用户邮件列表发布mahout相关问题。

相关问题