2017-12-29 32 views
0

HDFSからスナップファイルを解読する際に問題が発生しています。 hadoop fs -textを使用すると、ファイルを解凍して出力することができます。私はハドープスナップファイルの復号化

snappy.UncompressError: Error while decompressing: invalid input

を取得hadoop fs -copyToLocalを使用してのpython-てきぱきとファイルを解凍しようとした場合しかし、私のPythonプログラムは非常に簡単で、次のようになります。

import snappy 

with open (snappy_file, "r") as input_file: 
    data = input_file.read() 
    uncompressed = snappy.uncompress(data) 
    print uncompressed 

これは私のために無残に失敗しました。だから私は別のテキストを試して、私はhadoop fs -textからの出力を取り出し、python - スナッピーライブラリを使用してそれを圧縮した。私はそれをファイルに出力しました。私はこのファイルを読み込んで解凍できました。

AFAIKスナップショットはバージョン間で下位互換性があります。私のpythonコードは最新のスナップバージョンを使用しています。私はhadoopが古いスナッピングバージョンを使用していると推測しています。これが問題なのでしょうか?それとも私がここで紛失している何か他にありますか?

答えて

0

私はそれを理解しました。私が使用していたのは、hadoopのフレーミングフォーマットを使用して圧縮されたファイルのrawモード解凍であったことがわかります。私が0.5.1でStreamDecompressorを試しても、フレーミングエラーのために失敗しました。 python-snappy 0.5.1のデフォルトは新しいスナッピーframing formatです。したがって、hadoopスナッピーファイルを解凍することはできません。

マスタバージョン0.5.2がhadoopフレーミングフォーマットのサポートを追加しました。私はこれを構築し、私は簡単にファイルを解凍することができた、それをインポートしたら:

with open (snappy_file, "r") as input_file: 
    data = input_file.read() 
    decompressor = snappy.hadoop_snappy.StreamDecompressor() 
    uncompressed = decompressor.decompress(data) 

今、唯一の問題は、これはまだ技術的にピップのバージョンではないということですので、私は、私はただ待つか、する必要がありますねソースからのビルドを使用してください。