前言

Hive中对中间数据或最终数据都会做压缩处理,以提高吞吐量和性能。

通常压缩比高的占用空间小,但解压缩慢,反之亦然,常用的压缩格式有:GZIP、BZIP2、Snappy

压缩方式 压缩后大小 压缩速度 是否可分隔
GZIP
BZIP2
Snappy

Snappy因为解压缩速度很快,并且可以进行分隔,是大数据存储中最常用的压缩方式。

起因

今天跑批处理的时候,读取HDFS中的Snappy文件的时候报错了,这边使用的是org.apache.hadoop.hive.serde2.JsonSerDe的解析方式,解析TEXTFILE存储的JSON文件,压缩方式是Snappy,就想查看一下Snappy里面的具体文件内容。

解决问题

1.使用命令行查看

hadoop fs -text /XXX/XXX.snappy
复制代码

使用-text命令可以直接查看文件,或直接使用命令输出到文件中进行查看。

缺点是不方便进行一些复杂的处理,或者输出统计结果。

2.使用代码解析

使用代码解析后,就可以进行读取并处理,也可以输出统计结果,或异常数据可以直接定位。

CompressionCodec有两个方法可以用于压缩或解压缩数据。要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutputStream(OutputStreamout)方法创建一个CompressionOutputStream,将其以压缩格式写入底层的流。相反,要想对从输入流读取而来的数据进行解压缩,则调用createInputStream(InputStreamin)函数,从而获得一个CompressionInputStream,从而从底层的流读取未压缩的数据。

压缩方式 压缩包
GZIP org.apache.hadoop.io.compress.GzipCodec
BZIP2 org.apache.hadoop.io.compress.BZip2Codec
Snappy org.apache.hadoop.io.compress.SnappyCodec
DEFLATE org.apache.hadoop.io.compress.DefaultCodec
压缩和解压搜代码如下:
public static void main(String[] args) throws IOException {decompres("d:\a1-k01-1642561371606.snappy");}public static void compress(String filername, String method) throws ClassNotFoundException, IOException {// 1 创建压缩文件路径的输入流File fileIn = new File(filername);InputStream in = new FileInputStream(fileIn);// 2 获取压缩的方式的类Class codecClass = Class.forName(method);Configuration conf = new Configuration();// 3 通过名称找到对应的编码/解码器CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, conf);// 4 该压缩方法对应的文件扩展名File fileOut = new File(filername + codec.getDefaultExtension());OutputStream out = new FileOutputStream(fileOut);CompressionOutputStream cout = codec.createOutputStream(out);// 5 流对接IOUtils.copyBytes(in, cout, 1024 * 1024 * 5, false); // 缓冲区设为5MB// 6 关闭资源in.close();cout.close();out.close();
}public static void decompres(String filename) throws FileNotFoundException, IOException {Configuration conf = new Configuration();CompressionCodecFactory factory = new CompressionCodecFactory(conf);// 1 获取文件的压缩方法CompressionCodec codec = factory.getCodec(new Path(filename));// 2 判断该压缩方法是否存在if (null == codec) {System.out.println("Cannot find codec for file " + filename);return;}// 3 创建压缩文件的输入流InputStream cin = codec.createInputStream(new FileInputStream(filename));// 4 创建解压缩文件的输出流File fout = new File(filename + ".decoded");OutputStream out = new FileOutputStream(fout);// 5 流对接IOUtils.copyBytes(cin, out, 1024 * 1024 * 5, false);// 6 关闭资源cin.close();out.close();
}

Snappy你脱了马甲我照样认识你相关推荐

  1. 脱了马甲我也认识你: 聊聊 Android 中类的真实形态

    [这是 ZY 第 19 篇原创技术文章] 我们在平时开发过程中,一定定义过无数个千奇百怪的类,但是大家有想过,一个 Java 文件中的 Class,在虚拟机中的真实形态是什么么? 这篇文章就带大家探讨 ...

  2. 一统江湖的大前端(4)shell.js——穿上马甲我照样认识你

    [摘要]<一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你 ...

  3. 代码改动两三行,AI数据秒换隐身衣!隐私计算+AI?中科院博士实践分享一键切换...

    位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 脱了马甲我照样儿认识你! 这句在2000春晚赵本山的经典台词,放在隐私圈有了新的解释:在不看到数据"真面目"的情况下,照 ...

  4. Python面对对象编程——对象、类详解及实例

    Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...

  5. 使用Laya引擎开发微信小游戏(下)

    本文由云+社区发表 6. 动画 6.1 创建伞兵对象 在src目录下创建一个新目录role,用来存放游戏中角色. 在role里创建一个伞兵Soldier.ts对象文件. module role{exp ...

  6. apache 提示You don't have permission to access /test.php on this server.怎样解决

    关键字: Apache   403  Forbidden 系统配置: 操作系统:Red Hat Linux 6.2 Web服务器:Apache 3.1.1+jakarta-tomcat 3.1.1 数 ...

  7. apache 问题 You don't have permission to access /test.php on this server 解决方法

    关键字: Apache  403  Forbidden 系统配置: 操作系统:Red Hat Linux 6.2 Web服务器:Apache 3.1.1+jakarta-tomcat 3.1.1 数据 ...

  8. 互联网老炮儿谈用户,怎一个精字了得

    本文讲的是互联网老炮儿谈用户,怎一个"精"字了得[IT168评论]在写这篇文章之前,我把这位互联网老炮儿演讲的速记读了一遍又一遍,自己都不知道看了多少遍,总觉得他不是在演讲,而是在 ...

  9. Win10怎么截屏录屏?Win10截图方法大全 超强大的工具!

    转载自奇它博客,原文链接:[http://qitablog.com/tips/win10怎么截屏录屏?win10截图方法大全-超强大的工具!.html ‎] [infobox title=" ...

最新文章

  1. 如何比较浮点数相等_『GCTT 出品』Go 语言中的比较操作符
  2. 【Android 应用开发】Android 杀进程总结 ( 杀后台进程 | 杀前台进程 | 杀其它进程 )
  3. 机器人学习--图解激光SLAM
  4. HttpServletBean 、 FrameworkServlet 和 DispatcherServlet 关系
  5. docker from指令的含义_volume_from指令-docker撰写
  6. Android自定义gif进度条,Android自定义view-圆形百分比进度条效果
  7. Ps调色磨皮降噪抠图胶片特效模拟常用100款滤镜合集一键安装支持PSCC2015-2019win64
  8. 惠普服务器故障代码_惠普服务器常见问题及故障排除
  9. 萤石云摄像头无设备序列号验证码解决办法
  10. 传媒《财务管理》课程考试作业考核试题
  11. linux切换中文拼音快捷键,Fedora 16下调出中文拼音输入法
  12. 服务器部署nginx配置域名反向代理
  13. 游戏盾是什么/为什么app会被攻击
  14. Promise学习-手写一个promise
  15. 三防平板终端丨三防平板电脑丨三防平板如何应用在工业中?
  16. 利用Numpy+PIL读取图像实现手绘效果
  17. STM32F4xx系列使用HAL库配置SPI-读写FLASH
  18. PHP:【微信小程序】初识微信小程序,微信小程序配置
  19. 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
  20. SQLServer学习笔记 --- (20008, 'DB-Lib error message 20008, severity 9:\nUnable to open socket\nNet-Li

热门文章

  1. css字体左上角设置
  2. Unity报错Unsupported D3D format 0x58
  3. .Net下WinForm换肤控件整理
  4. Skin++皮肤库使用步骤
  5. VBA操作CAD画300个大小不同颜色不同的圆圈
  6. word文档docx解密软件,word文档docx权限限制怎么办?
  7. 红旗linux系统可以运行QQ吗,八步是腾讯linuxQQ在红旗Linux桌面6.0上运行
  8. 用U盘重装了Windows 7, 用起来很爽
  9. html ap div,第10讲 网页布局元素:Ap DIV.ppt
  10. 研究生科研文献阅读方法