首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由Hadoop发出的本机snappy压缩数据不能通过java-snappy版本提取。

由Hadoop发出的本机snappy压缩数据不能通过java-snappy版本提取。
EN

Stack Overflow用户
提问于 2014-12-09 09:35:42
回答 1查看 2.2K关注 0票数 2

当我们使用火花,经过一些处理后,我将结果存储为文件,并使用snappy编解码器与简单的代码:

代码语言:javascript
复制
 data.saveAsTextFile("/data/2014-11-29",classOf[org.apache.hadoop.io.compress.SnappyCodec])

在那之后,当我使用火花读取这个文件夹文件,所以一切都完美地工作!但是今天,我尝试在我的电脑中使用java snappy (java 1.1.1.2)来解压缩结果文件夹中的文件(这个文件是从这个文件夹下载到我的pc的文件之一)。

maven依赖关系:

代码语言:javascript
复制
<dependency>
    <groupId>org.xerial.snappy</groupId>
    <artifactId>snappy-java</artifactId>
    <version>1.1.1.2</version>
</dependency>

我使用这段代码来解压缩:

代码语言:javascript
复制
File fileIn = new File("E:\\dt\\part-00000.snappy");
File fileOut = new File("E:\\dt\\adv1417971604684.dat");
FileOutputStream fos = new FileOutputStream(fileOut, true);
byte[] fileBytes = Files.readAllBytes(Paths.get(fileIn.getPath()));
byte[] fileBytesOut = Snappy.uncompress(fileBytes);
fos.write(fileBytesOut);

但是:(我立即得到这个错误:

代码语言:javascript
复制
    java.io.IOException: FAILED_TO_UNCOMPRESS(5)
 at org.xerial.snappy.SnappyNative.throw_error(SnappyNative.java:84)
 at org.xerial.snappy.SnappyNative.rawUncompress(Native Method)
 at org.xerial.snappy.Snappy.rawUncompress(Snappy.java:444)
 at org.xerial.snappy.Snappy.uncompress(Snappy.java:480)
 at org.xerial.snappy.Snappy.uncompress(Snappy.java:456)
 at

在星火集群中,我们使用:

spark 1.1.0 &Hadoop2.5.1(带有本机)

下面是运行hadoop检查-a时的结果:

代码语言:javascript
复制
    14/12/09 16:16:57 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2    library system-native
14/12/09 16:16:57 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /usr/local/hadoop/hadoop2.5.1/lib/native/libhadoop.so
zlib:   true /lib64/libz.so.1
snappy: true /usr/local/hadoop/hadoop2.5.1/lib/native/libsnappy.so.1
lz4:    true revision:99
bzip2:  true /lib64/libbz2.so.1

我从链接下载并构建了本机snappy:

https://code.google.com/p/snappy/和来源:https://drive.google.com/file/d/0B0xs9kK-b5nMOWIxWGJhMXd6aGs/edit?usp=sharing

有人请解释一下这个奇怪的错误!hadoop使用本机snappy压缩来自java?的数据时有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-25 15:03:04

我是snappy的开发者。Hadoop的SnappyCodec与Snappy的格式规范description.txt不完全相同

Hadoop中的SnappyCodec扩展了这种格式来压缩大数据流。数据被分割成块(通过BlockCompressionStream),每个块都有一些头和压缩的数据。若要使用Snappy.uncompress方法读取压缩数据,需要提取每个块并删除其标头。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27375581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档