gpt4 book ai didi

java - Hadoop 发出的原生 snappy 压缩数据无法通过 java-snappy 版本提取

转载 作者:可可西里 更新时间:2023-11-01 14:44:43 38 4
gpt4 key购买 nike

当我们在一些处理后使用 Spark 时,我将结果存储到文件中,并使用简单代码使用 snappy 编解码器:

 data.saveAsTextFile("/data/2014-11-29",classOf[org.apache.hadoop.io.compress.SnappyCodec])

在那之后,当我使用 Spark 读取这个文件夹文件时,一切都完美无缺!但是今天我尝试在我的电脑上使用 java snappy (java-snappy 1.1.1.2) 来解压结果文件夹中的一个文件(这个文件是从这个文件夹下载到我的电脑的文件之一)

maven 依赖:

<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>1.1.1.2</version>
</dependency>

我用这段代码解压:

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);

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

    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 集群中我们使用:

spark 1.1.0 && hadoop 2.5.1 ( with native hadoop snappy )

这是我运行 hadoop checknative -a 时的结果:

    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 native:

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

有人请解释这个奇怪的错误!! hadoop使用原生snappy压缩数据和使用java-snappy有区别吗?????

最佳答案

我是 snappy-java 的开发者。 Hadoop 的 SnappyCodec 与 Snappy 的格式规范不完全相同:https://code.google.com/p/snappy/source/browse/trunk/format_description.txt

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

关于java - Hadoop 发出的原生 snappy 压缩数据无法通过 java-snappy 版本提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27375581/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com