解密Hadoop Snappy文件

3
所以,我在解密来自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

这对我来说失败了。所以我尝试了另一个文本,我使用的输出并使用库进行压缩。然后将其输出到文件中。我能够读取这个文件并成功解压缩它。
据我所知,snappy在版本之间是向后兼容的。我的Python代码正在使用最新的snappy版本,我猜hadoop正在使用旧的snappy版本。这可能是个问题吗?还是我漏掉了什么其他的东西?
1个回答

4

好的,我找到了解决方法。原来我使用的是原始模式解压缩一个使用Hadoop编码格式的文件。即使我尝试了0.5.1版本的StreamDecompressor,由于编码错误仍然失败了。python-snappy 0.5.1默认使用新的snappy 编码格式,因此无法解压缩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版本,所以我想我只能等待或者使用源代码构建。

抱歉 @Leila,我的使用方式相当简单。从未尝试过这样的东西! - anoneironaut
3
你好 @anoneironaut,我跟着你的代码走,但是当我想用 print(uncompressed) 查看结果时,输出的是 b''。你有什么想法吗? - mjbsgll
1
@anoneironaut 我遇到了同样的问题。 - Khris
我也遇到了同样的问题。当我尝试直接从一个.snappy文件中读取时,得到的是空字节。有人找到了另外的解决方案/库吗?这是python-snappy的hadoop snappy模块本身的一个bug吗? - Tshimanga
当我移除了"hadoop_snappy",它确实起作用,而不是返回空字节。 contents = input_file.read() decompressor = snappy.StreamDecompressor() uncompressed = decompressor.decompress(contents)``` - chomar.c
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接