[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本身 ...
随机推荐
- 全网最详细的IDEA里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【一个子项目】并存)(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...
- UML介绍--用例图
用例图定义:由参与者(Actor).用例(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图称为用例图. 用例图(User Case)是被称为参与者的外部用户所能观察到的系统功能的模 ...
- linux图形化客户端
很多服务器都用linux 但这些linux都是没有图形化界面的, 一般也不建议在服务器上装图形化界面 我们都知道,维护linux,大部分都是使用命令 那么,为什么不能开发一个应用程序, 把图形化操作转 ...
- Java基础系列--final、finally关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html 一.概述 final是Java关键字中最常见之一,表示“最终的,不可 ...
- Spark ML机器学习
Spark提供了常用机器学习算法的实现, 封装于spark.ml和spark.mllib中. spark.mllib是基于RDD的机器学习库, spark.ml是基于DataFrame的机器学习库. ...
- C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一
前言 微信网页授权共分为两种方式:snsapi_base.snsapi_userinfo. snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面. snsapi_userinfo是在 ...
- Linux tar 命令用法
tar 命令可以为linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar 最初被用来在磁带上创建档案,现在,用户 ...
- Umbraco 7 支持Microsoft Word 2013 发布内容
本文介绍如何使用Microsoft Word 2013 编写或编辑你的Blogs或新闻页面,甚至不需要打开浏览器, 我将分成两部分来讲. 概述 本例实采用的是Umbraco 7.2 版本,首页效果: ...
- angularjs学习第九天笔记(指令作用域【隔离作用域】研究)
您好,昨天学习了指令作用域为布尔型的情况, 今天主要研究其指针作用域为{}的情况 1.当作用域scope为{}时,子作用域完全创建一个独立的作用域, 此时,子做预约和外部作用域完全不数据交互 但是,在 ...
- Oracle em 此网站的安全证书存在问题
https://www.cnblogs.com/hyz5525/p/4390252.html C:\>emctl status dbconsole Oracle Enterprise Manag ...