0

mahout を使用して mapreduce プログラムを作成しました。マップの出力値はClusterWritable.eclipseでコードを実行するとエラーなしで実行されますが、ターミナルでrhe 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

4

1 に答える 1

0

マッパーが実行され、上記のスタック トレースは Mahout の CanopyMapper であり、作成したカスタムのものではありません。CanopyMapper.cleanup メソッドが出力しています (キー: Text、値: VectorWritable)。CanopyMapper.javaを参照してください

MR ジョブが構成されているCanopyDriver.javaとその buildClustersMR メソッド、マッパー、リデューサー、および適切な出力キー/値クラスも参照してください。

明言しなかったので、データ フロー パイプラインで複数の MR ジョブを使用していると思います。パイプライン内の各ジョブの出力が、パイプライン内の次のジョブの有効な入力または予期される入力であることを確認してください。カスケード/スケーディングを使用してデータ フローを定義することを検討してください ( http://www.slideshare.net/melrief/scalding-programming-model-for-hadoopを参照) 。

Mahout ユーザー メーリング リストを使用して、Mahout 関連の質問を投稿することを検討してください。

于 2013-10-13T17:52:30.033 に答える