gzip
1つのジョブで出力とlzo
フォーマットを同時に行いたい。
私はを使用MultipleOutputs
し、次のような2つの名前付き出力を追加しました。
MultipleOutputs.addNamedOutput(job, "LzoOutput", GBKTextOutputFormat.class, Text.class, Text.class);
GBKTextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);
MultipleOutputs.addNamedOutput(job, "GzOutput", TextOutputFormat.class, Text.class, Text.class);
TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
(GBKTextOutputFormat
ここは自分で書いたもので、拡張されていますFileOutputFormat
)
それらは次のようなレデューサーで使用されます:
multipleOutputs.write("LzoOutput", NullWritable.get(), value, "/user/hadoop/lzo/"+key.toString());
multipleOutputs.write("GzOutput", NullWritable.get(), value, "/user/hadoop/gzip/"+key.toString());
結果は次のとおりです。
2つのパスで出力を取得できますが、どちらもgzip
フォーマットです。
誰かが私を助けることができますか?ありがとう!
================================================== ========================
もっと:
setOutputCompressorClass
のソースコードを見たところFileOutputFormat
、conf.setClass("mapred.output.compression.codec", codecClass, CompressionCodec.class);
setOutputCompressorClassが呼び出されると、構成内のmapred.output.compression.codecがリセットされるようです。
したがって、実際の圧縮形式は最後に設定したものであり、同じジョブで2つの異なる圧縮形式を設定することはできませんか?または他に無視されているものがありますか?