[Compression] Hadoop 压缩
0. 说明
Hadoop 压缩介绍 && 压缩格式总结 && 压缩编解码器测试
1. 介绍
【文件压缩的好处】
文件压缩的好处如下:
- 减少存储文件所需要的磁盘空间
- 加速数据在网络和磁盘上的传输
2. 压缩编解码器
【2.1 压缩格式总结】

| 压缩比高 | 压缩速度快 |
| DEFLATE | LZ4 |
| gzip | LZO |
| bzip2 | Snappy |
3. 测试压缩编解码器
【3.1 使用 LZO 编解码器】
使用 LZO 编解码器需要在 pom.xml 中添加依赖
<!-- LZO 依赖 -->
<dependency>
<groupId>org.anarres.lzo</groupId>
<artifactId>lzo-hadoop</artifactId>
<version>1.0.0</version>
</dependency>
【3.2 编写测试代码】
package hadoop.compression; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.*;
import org.apache.hadoop.util.ReflectionUtils; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; /**
* 测试压缩 && 解压缩
*/
public class TestCodec { public static void main(String[] args) {
// SnappyCodec.class 需要配置 Hadoop,然后进行相关操作
Class[] clazzes = {
DeflateCodec.class,
GzipCodec.class,
BZip2Codec.class,
Lz4Codec.class,
LzopCodec.class,
SnappyCodec.class
}; for (Class clazz : clazzes) {
// 调用压缩方法
testCompress(clazz);
// 调用解压缩方法
testDecompress(clazz);
}
} /**
* 测试压缩
*/
public static void testCompress(Class clazz) { try {
// 获得当前时间
long start = System.currentTimeMillis(); Configuration conf = new Configuration(); // 通过反射获取 CompressionCodec 对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz, conf); // 获得文件扩展名
String ext = codec.getDefaultExtension(); // 通过 codec 获取输出流,将文件进行压缩
CompressionOutputStream cos = codec.createOutputStream(new FileOutputStream("E:/test/codec/sdata.txt" + ext)); // 获取输入流
FileInputStream fis = new FileInputStream("E:/test/codec/sdata.txt"); IOUtils.copyBytes(fis, cos, 1024); fis.close();
cos.close(); // 计算总时长
System.out.print("压缩编解码器: " + ext + "压缩时间" + (System.currentTimeMillis() - start)); File f = new File("E:/test/codec/sdata.txt" + ext);
System.out.println(" 文件大小: " + f.length()); } catch (Exception e) {
e.printStackTrace();
} } /**
* 测试解压缩
*
* @param clazz
*/
public static void testDecompress(Class clazz) {
try {
// 获得当前时间
long start = System.currentTimeMillis(); Configuration conf = new Configuration(); // 通过反射获取 CompressionCodec 对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz, conf); // 获得文件扩展名
String ext = codec.getDefaultExtension(); // 通过 codec 获取输入流,将文件进行解压缩
CompressionInputStream cis = codec.createInputStream(new FileInputStream("E:/test/codec/sdata.txt" + ext)); // 获取输出流
FileOutputStream fos = new FileOutputStream("E:/test/codec/sdata2.txt"); IOUtils.copyBytes(cis, fos, 1024); IOUtils.closeStream(fos); cis.close(); // 计算总时长
System.out.print("解压缩时间" + (System.currentTimeMillis() - start)); } catch (Exception e) {
e.printStackTrace();
}
} }
【3.3 测试结果】
压缩编解码器 压缩时间 文件大小 解压缩时间
.deflate
.gz
.bz2
.lz4
.lzo 压缩时长 lz4 < lzo < gz < deflate < bz2
压缩比 lz4 < lzo < gz < deflate < bz2
解压时长 lz4 < lzo < deflate < gz < bz2
【3.4 解决 LZO 和 Snappy 的压缩编解码器】
1. LZO: 通过添加 Maven 依赖导入相关 Jar 包
2. Snappy:替换 Hadoop 安装包(在 CentOS 中)
3. 将 lzo-hadoop.jar 和 lzo-core.jar 放在 /soft/hadoop/share/hadoop/common/lib 目录中
4. 运行打包好的 Jar 包
hadoop jar myhadoop-1.0-SNAPSHOT.jar com.hadoop.Compression.TestCodec
并未进行 Snappy 操作,所以测试结果不包含 Snappy
[Compression] Hadoop 压缩的更多相关文章
- hadoop压缩配置
为何要使用压缩,压缩可以是文件的大小减小很多,节省空间:另外压缩后的文件在传输时更节省带宽. 所需软件: 1)lzo 2)hadoop-lzo 3)maven 安装编译: 1)lzo wget htt ...
- hadoop压缩框架
一般来说,计算机处理的数据都存在一些冗余度,同时数据中间,尤其是相邻数据间存在着相关性,所以可以通过一些有别于原始编码的特殊编码方式来保存数据,使数据占用的存储空间比较小,这个过程一般叫压缩.和压缩对 ...
- Hadoop压缩之CompressionCodecFactory
1.CompressionCodecFactory简介 当在读取一个压缩文件的时候,可能并不知道压缩文件用的是哪种压缩算法,那么无法完成解压任务.在Hadoop中,CompressionCodecFa ...
- Hadoop压缩的图文教程
近期由于Hadoop集群机器硬盘资源紧张,有需求让把 Hadoop 集群上的历史数据进行下压缩,开始从网上查找的都是关于各种压缩机制的对比,很少有关于怎么压缩的教程(我没找到..),再此特记录下本次压 ...
- Hadoop压缩之MapReduce中使用压缩
1.压缩和输入分片 Hadoop中文件是以块的形式存储在各个DataNode节点中,假如有一个文件A要做为输入数据,给MapReduce处理,系统要做的,首先从NameNode中找到文件A存储在哪些D ...
- hadoop压缩和解压
最近有一个hadoop集群上的备份需求.源文件有几百G,如果直接复制太占用磁盘空间.将文件从hadoop集群下载到本地,压缩之后再上传到hadoop则太耗时间.于是想到能否直接在HDFS文件系统上进行 ...
- Hadoop压缩
为什幺要压缩? 压缩会提高计算速度?这是因为mapreduce计算会将数据文件分散拷贝到所有datanode上,压缩可以减少数据浪费在带宽上的时间,当这些时间大于压缩/解压缩本身的时间时,计算速度就会 ...
- [LeetCode] String Compression 字符串压缩
Given an array of characters, compress it in-place. The length after compression must always be smal ...
- 解读:hadoop压缩格式
Hadoop中用得比较多的4种压缩格式:lzo,gzip,snappy,bzip2.它们的优缺点和应用场景如下: 1). gzip压缩 优点:压缩率比较高,而且压缩/解压速度也比较快:hadoop本身 ...
随机推荐
- Python:SQLMap源码精读—start函数
源代码 def start(): """ This function calls a function that performs checks on both URL ...
- servlet 请求乱码解决
- mysql 开发进阶篇系列 31 工具篇(mysql连接工具与MyISAM表压缩工具)
一.mysql 连接工具 在mysq提供的工具中,DBA使用最频繁的莫过于mysql.这里的mysql是指连接数据库的客户端工具. 1.1 连接选项 -u, -- user=name 指定用户名 -p ...
- javascript Uncaught ReferenceError: 方法名 is not defined
前言: 那天我犯了这样一个低级错误,如果按照这样下去,根本在这条路上走不远.错的太离谱,把代码拿出来自己笑笑,等摆脱菜鸟之名的时候再回来好好的告诉自己,都是这么过来的,原来以前我菜的这么离谱.. 错误 ...
- swiper下滑分页,减少swiper-slide项的时候会出现空白
修改子项后,先重置当前的页,调用 swiper.slideTo(0); 滚动到初始位置 再调用 swiper.update(); 更新一系列设置就可以了.
- 如何在UWP中统一处理不同设备间的页面回退逻辑
已经有一段时间没有写博客来记录自己的学习点滴了.现在回想起来确实有些惭愧,期间经历了一些事情,到目前为止算是平息了,是时候该收收心来充实自己了. 在本篇缪文中,楼主打算给UWP开发的初学者讲述一个在开 ...
- Spring基于纯注解方式的使用
经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...
- Python中元组相关知识
下面给大家介绍以下元组的相关知识: ·元组可以看成是一个不可更改的list 1.元组的创建 # 创建空元祖 t = () print(type(t)) # 创建只有一个值的元组 # 观察可知元组中如果 ...
- 方差variance, 协方差covariance, 协方差矩阵covariance matrix
https://www.jianshu.com/p/e1c8270477bc?utm_campaign=maleskine&utm_content=note&utm_medium=se ...
- Oracle绑定变量在C#.NET中的应用及意义
一. 什么是绑定变量 绑定变量(bind variable) : select * from emp where empno=:empno; 是用户放入查询中的占位符,它会告诉Oracle“我会随后为 ...