2013-10-12 39 views
0

我已經使用mahout編寫了mapreduce程序。地圖輸出值是ClusterWritable。當我在Eclipse中運行的代碼,將其與沒有錯誤運行,但是當我運行RHE在終端jar文件,它示出了異常:apache Mahout中的錯誤值

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) 

在地圖的輸出代碼是:

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

但我不知道它爲什麼說值類型爲VectorWritable

回答

0

映射器正在運行,導致上面的堆棧跟蹤是Mahout的CanopyMapper,而不是您編寫的自定義映射器。 CanopyMapper.cleanup方法正在輸出(key:Text,value:VectorWritable)。 參見CanopyMapper.java

參見CanopyDriver.java及其buildClustersMR方法,其中MR作業被配置,映射器,減速機,和適當的輸出的鍵/值的類。

您沒有聲明,所以我猜測您在數據流管道中使用了多個MR作業。檢查流水線中每個作業的輸出是否是下一個管道作業的有效/預期輸入。考慮使用級聯/滾動來定義數據流(請參閱http://www.slideshare.net/melrief/scalding-programming-model-for-hadoop

考慮使用Mahout user mailing list發佈Mahout相關問題。

+0

Slavic:我已經將mahout 8 jar文件添加到項目的lib文件夾中。mahout 8中的輸出值是ClusterWritable。 –