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

 梁lxc_131 发布于 2022-12-07 11:13

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

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

之后我使用Spark来读取这个文件夹文件,所以Everything工作得很好!但是今天我尝试在我的电脑中使用java snappy(java-snappy 1.1.1.2)来解压缩结果文件夹中的文件(这个文件是从这个文件夹中下载到我的Pc的文件之一)

maven依赖:


    org.xerial.snappy
    snappy-java
    1.1.1.2

我用这段代码解压缩:

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 1.1.0 && hadoop 2.5.1(原生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的数据时,是否存在一些差异??????

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

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

    2022-12-11 02:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有