1

Java フレームワーク、具体的には Python の外部で Hadoop のシーケンス ファイルを生成する実験を行っています。これを行うためのほぼ同様のフレームワークを提供する python-hadoop モジュールがあります。それを使用してシーケンスファイルを正常に作成しました。生成されたシーケンス ファイルを HDF にコピーして、Hadoop ジョブの入力として使用できます。LZO と Snappy はローカルの Hadoop インストールで完全に構成されており、Java で org.apache.hadoop.io.SequenceFile.createWriter を介して実行すると、これらのアルゴリズムを使用して適切な圧縮シーケンス ファイルを生成できます。

しかし、python-hadoop で (ブロック) 圧縮方式として LZO や Snappy を試してみると、有効なシーケンス ファイルが生成されないようです。このコードと同様のスキームを使用しています。

https://github.com/fenriswolf/python-hadoop/blob/master/python-hadoop/hadoop/io/compress/LzoCodec.py

(ここでは、lzo を Snappy 圧縮用の snappy に置き換えます)、python-hadoop フレームワーク内では、これらのファイルをエラーなしで読み書きできます。ただし、Hadoop では、Hadoop 入力としてフィードすると EOF エラーが発生します。

Exception in thread "main" java.io.EOFException
        at org.apache.hadoop.io.compress.BlockDecompressorStream.rawReadInt(BlockDecompressorStream.java:126)
        at org.apache.hadoop.io.compress.BlockDecompressorStream.getCompressedData(BlockDecompressorStream.java:98)
        at org.apache.hadoop.io.compress.BlockDecompressorStream.decompress(BlockDecompressorStream.java:82)
        at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:76)
        at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:64)
        at java.io.DataInputStream.readByte(DataInputStream.java:265)
        at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:299)
        at org.apache.hadoop.io.WritableUtils.readVInt(WritableUtils.java:320)
        at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1911)
        at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1934)
        at SequenceFileReadDemo.main(SequenceFileReadDemo.java:34)

LZO または Snappy を使用している場合にのみ、この特定のメッセージが一貫して表示されます。

私の疑いでは、Hadoop の LzoCodec と SnappyCodec は、lzo と snappy の Python の実装と同じ方法で生成または読み取りを行っていませんが、どうあるべきかわかりません。

Java Hadoop フレームワークの外部で、これらの圧縮スキームを使用したシーケンス ファイルが適切に生成されない理由はありますか? 繰り返しますが、Gzip、BZip2、または Default を使用している限り、すべてが正常に機能します。

4

0 に答える 0