2

出力形式が。のジョブがありますSequenceFileOuputFormat

出力キーと値クラスを次のように設定します。

conf.setOutputKeyClass(IntWritable.class);
conf.setOutputValueClass(SplitInfo.class);

SplitInfoクラス_implements Serializable,Writable

io.serializationsプロパティを次のように設定します。

conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization," 
+ "org.apache.hadoop.io.serializer.WritableSerialization");

ただし、レデューサー側では、Hadoopがシリアライザーを見つけられなかったことを示すこのエラーが発生します。

    java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.io.SequenceFile$Writer.init(SequenceFile.java:961)
at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:892)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:393)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:354)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:476)
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat.getRecordWriter(SequenceFileOutputFormat.java:61)
at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.<init>(ReduceTask.java:569)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:638)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)

誰か助けてもらえますか?

4

2 に答える 2

3

問題は、私が愚かな間違いを犯していたことでした:私は瓶を更新していませんでした。したがって、基本的に、SplitInfoは古い(使用中の)jarにWritableインターフェースを実装していませんでした。

一般的な観察として:OPで指定されたエラーは、HADOOPがシリアル化しようとしている特定のタイプのシリアライザーを見つけることができないという事実を根本的に引き起こしています(直接または間接的に、たとえばそのタイプを出力として使用することによって)キー/値)。Hadoopは、次の2つの理由のいずれかでSerilizerを見つけることができません。

  1. タイプがシリアル化可能ではありません(つまり、書き込み可能またはシリアル化可能を実装していません)
  2. タイプが実装するシリアル化のタイプに対してHadoopで使用できるシリアライザーはありません(例:タイプは書き込み可能を実装しますが、何らかの理由でHadoopはorg.apache.hadoop.io.serializer.WritableSerializationクラスを使用できません)
于 2012-09-16T18:39:18.683 に答える
0

私はあなたがする必要のない何かをしようとしていると思います。出力値は、書き込み可能なインターフェイスを実装するだけでよく、出力形式を設定するだけで済みます。

conf.setOutputFormatClass(SequenceFileOutputFormat.class);

「io.serializations」構成を使用するのは、必要とは思えない別のシリアル化フレームワークを使用する場合のみです。

于 2012-09-16T04:29:08.283 に答える