解密 Hadoop Snappy 文件

Decrypting Hadoop Snappy File

所以我在从 HDFS 解密 snappy 文件时遇到了一些问题。如果我使用 hadoop fs -text 我能够解压缩并输出文件只是文件。但是,如果我使用 hadoop fs -copyToLocal 并尝试使用 python-snappy 解压缩文件,我会得到

snappy.UncompressError: Error while decompressing: invalid input

我的 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-snappy 库压缩它。然后我将其输出到文件中。然后我就可以读入这个文件并解压它了。

AFAIK snappy 在版本之间向后兼容。我的 python 代码使用的是最新的 snappy 版本,我猜 hadoop 使用的是较旧的 snappy 版本。这可能是个问题吗?还是我还缺少其他东西?

好吧,我明白了。事实证明,我使用的是对使用 hadoop 的帧格式压缩的文件的原始模式解压缩。即使我在 0.5.1 中尝试使用 StreamDecompressor,它仍然由于帧错误而失败。 python-snappy 0.5.1 默认为新的 snappy framing format,因此无法解压 hadoop snappy 文件。

原来主版本0.5.2已经加入了对hadoop framing格式的支持。一旦我构建并导入它,我就可以轻松解压缩文件:

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

现在唯一的问题是这在技术上还不是 pip 版本,所以我想我将不得不等待或使用源代码构建。