解密hadoop snappy文件

iklwldmw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(928)

所以我在从hdfs解密一个快速文件时遇到了一些问题。如果我使用 hadoop fs -text 我能够解压缩和输出文件只是文件。但是如果我使用 hadoop fs -copyToLocal 尝试用python snappy解压文件
snapy.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版本。这会是个问题吗?还是我还缺什么?

zour9fqk

zour9fqk1#

好吧,我知道了。结果发现我使用的是原始模式解压一个使用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版本,所以我想我将不得不等待或只是使用源代码的构建。

相关问题