Snappy你脱了马甲我照样认识你
前言
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你脱了马甲我照样认识你相关推荐
- 脱了马甲我也认识你: 聊聊 Android 中类的真实形态
[这是 ZY 第 19 篇原创技术文章] 我们在平时开发过程中,一定定义过无数个千奇百怪的类,但是大家有想过,一个 Java 文件中的 Class,在虚拟机中的真实形态是什么么? 这篇文章就带大家探讨 ...
- 一统江湖的大前端(4)shell.js——穿上马甲我照样认识你
[摘要]<一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你 ...
- 代码改动两三行,AI数据秒换隐身衣!隐私计算+AI?中科院博士实践分享一键切换...
位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 脱了马甲我照样儿认识你! 这句在2000春晚赵本山的经典台词,放在隐私圈有了新的解释:在不看到数据"真面目"的情况下,照 ...
- Python面对对象编程——对象、类详解及实例
Python中类与对象的初认识 1.Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的 ...
- 使用Laya引擎开发微信小游戏(下)
本文由云+社区发表 6. 动画 6.1 创建伞兵对象 在src目录下创建一个新目录role,用来存放游戏中角色. 在role里创建一个伞兵Soldier.ts对象文件. module role{exp ...
- 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 数 ...
- 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 数据 ...
- 互联网老炮儿谈用户,怎一个精字了得
本文讲的是互联网老炮儿谈用户,怎一个"精"字了得[IT168评论]在写这篇文章之前,我把这位互联网老炮儿演讲的速记读了一遍又一遍,自己都不知道看了多少遍,总觉得他不是在演讲,而是在 ...
- Win10怎么截屏录屏?Win10截图方法大全 超强大的工具!
转载自奇它博客,原文链接:[http://qitablog.com/tips/win10怎么截屏录屏?win10截图方法大全-超强大的工具!.html ] [infobox title=" ...
最新文章
- 如何比较浮点数相等_『GCTT 出品』Go 语言中的比较操作符
- 【Android 应用开发】Android 杀进程总结 ( 杀后台进程 | 杀前台进程 | 杀其它进程 )
- 机器人学习--图解激光SLAM
- HttpServletBean 、 FrameworkServlet 和 DispatcherServlet 关系
- docker from指令的含义_volume_from指令-docker撰写
- Android自定义gif进度条,Android自定义view-圆形百分比进度条效果
- Ps调色磨皮降噪抠图胶片特效模拟常用100款滤镜合集一键安装支持PSCC2015-2019win64
- 惠普服务器故障代码_惠普服务器常见问题及故障排除
- 萤石云摄像头无设备序列号验证码解决办法
- 传媒《财务管理》课程考试作业考核试题
- linux切换中文拼音快捷键,Fedora 16下调出中文拼音输入法
- 服务器部署nginx配置域名反向代理
- 游戏盾是什么/为什么app会被攻击
- Promise学习-手写一个promise
- 三防平板终端丨三防平板电脑丨三防平板如何应用在工业中?
- 利用Numpy+PIL读取图像实现手绘效果
- STM32F4xx系列使用HAL库配置SPI-读写FLASH
- PHP:【微信小程序】初识微信小程序,微信小程序配置
- 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
- SQLServer学习笔记 --- (20008, 'DB-Lib error message 20008, severity 9:\nUnable to open socket\nNet-Li