[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本身 ...
随机推荐
- 从零开始学 Web 之 DOM(二)对样式的操作,获取元素的方式
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- 从零开始学 Web 之 HTML5(四)拖拽接口,Web存储,自定义播放器
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Shell 数组定义与获取
Shell 数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似与 C 语言,数组元素的下标由 0 开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于 ...
- jQuery学习(2)ajax()使用
在上一篇分享JavaScript之使用AJAX(适合初学者)中,我们学习了如何在JavaScript中使用AJAX.由于jQuery出色的性能和简洁的写法,且它也支持AJAX的使用,所以,本次分享 ...
- IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API
IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API 原文:http://docs.identityserver.io/en/release/quickstarts/ ...
- Layui 获取 radio的值
var OutInvoiceType = $('#OutInvoiceType input[checked]').val(); 就可以获取到了.
- [转]group by 后使用 rollup 子句总结
group by 后使用 rollup 子句总结 一.如何理解group by 后带 rollup 子句所产生的效果 group by 后带 rollup 子句的功能可以理解为:先按一定的规则产生多种 ...
- jquery 截取屏幕
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Java字符串String
Java字符串String 我们知道Java的字符窜是Immutable(不可变)的,一旦创建就不能更改其内容了:平常我们对字符串的操作是最多的,其实对字符串的操作,返回的字符串都是新建的字符串对象, ...