解密Hadoop Snappy文件

时间:2017-12-29 00:46:17

标签: python hadoop snappy

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

  

snappy.UncompressError:解压缩时出错:输入无效

我的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版本。这可能是个问题吗?或者我在这里还缺少什么?

1 个答案:

答案 0 :(得分:3)

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

原来,主版本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)

现在唯一的问题是,这在技术上还不是一个pip版本,所以我想我必须等待或者只是从源代码中使用构建。