0. 说明

  Hadoop 压缩介绍 && 压缩格式总结 && 压缩编解码器测试


1. 介绍

  【文件压缩的好处】

  文件压缩的好处如下:

  1. 减少存储文件所需要的磁盘空间
  2. 加速数据在网络和磁盘上的传输

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 压缩的更多相关文章

  1. hadoop压缩配置

    为何要使用压缩,压缩可以是文件的大小减小很多,节省空间:另外压缩后的文件在传输时更节省带宽. 所需软件: 1)lzo 2)hadoop-lzo 3)maven 安装编译: 1)lzo wget htt ...

  2. hadoop压缩框架

    一般来说,计算机处理的数据都存在一些冗余度,同时数据中间,尤其是相邻数据间存在着相关性,所以可以通过一些有别于原始编码的特殊编码方式来保存数据,使数据占用的存储空间比较小,这个过程一般叫压缩.和压缩对 ...

  3. Hadoop压缩之CompressionCodecFactory

    1.CompressionCodecFactory简介 当在读取一个压缩文件的时候,可能并不知道压缩文件用的是哪种压缩算法,那么无法完成解压任务.在Hadoop中,CompressionCodecFa ...

  4. Hadoop压缩的图文教程

    近期由于Hadoop集群机器硬盘资源紧张,有需求让把 Hadoop 集群上的历史数据进行下压缩,开始从网上查找的都是关于各种压缩机制的对比,很少有关于怎么压缩的教程(我没找到..),再此特记录下本次压 ...

  5. Hadoop压缩之MapReduce中使用压缩

    1.压缩和输入分片 Hadoop中文件是以块的形式存储在各个DataNode节点中,假如有一个文件A要做为输入数据,给MapReduce处理,系统要做的,首先从NameNode中找到文件A存储在哪些D ...

  6. hadoop压缩和解压

    最近有一个hadoop集群上的备份需求.源文件有几百G,如果直接复制太占用磁盘空间.将文件从hadoop集群下载到本地,压缩之后再上传到hadoop则太耗时间.于是想到能否直接在HDFS文件系统上进行 ...

  7. Hadoop压缩

    为什幺要压缩? 压缩会提高计算速度?这是因为mapreduce计算会将数据文件分散拷贝到所有datanode上,压缩可以减少数据浪费在带宽上的时间,当这些时间大于压缩/解压缩本身的时间时,计算速度就会 ...

  8. [LeetCode] String Compression 字符串压缩

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  9. 解读:hadoop压缩格式

    Hadoop中用得比较多的4种压缩格式:lzo,gzip,snappy,bzip2.它们的优缺点和应用场景如下: 1). gzip压缩 优点:压缩率比较高,而且压缩/解压速度也比较快:hadoop本身 ...

随机推荐

  1. Zabbix系列之二——添加监控主机步凑

    1.登录监控平台,配置——主机——创建主机 2.主机设置 3.添加模板

  2. xlwt set style making error: More than 4094 XFs (styles)

    使用Xlwt,当内容过多时,会报错:More than 4094 XFs (styles) 解决方法: wb = xlwt.Workbook(style_compression=2) 使用style_ ...

  3. Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  4. underscore.js源码解析【对象】

    // Object Functions // ---------------- // Keys in IE < 9 that won't be iterated by `for key in . ...

  5. Git学习系列之Windows上安装Git详细步骤(图文详解)

    前言 最初,Git是用于Linux下的内核代码管理.因为其非常好用,目前,已经被成功移植到Mac和Windows操作系统下. 鉴于大部分使用者使用的是Windows操作系统,故,这里详细讲解Windo ...

  6. Kafka实战-Kafka Cluster

    1.概述 在<Kafka实战-入门>一篇中,为大家介绍了Kafka的相关背景.原理架构以及一些关键知识点,本篇博客为大家来赘述一下Kafka Cluster的相关内容,下面是今天为大家分享 ...

  7. Docker构建Java web应用服务

    1.构建一个Java应用服务,包含两个步骤:a.一个镜像从URL拉取指定的WAR文件并保存到卷里b.一个含有Tomcat服务器的镜像运行这些下载的WAR文件 2.构建下载WAR的镜像 FROM cen ...

  8. redis linux(centos) 安装

    前言 redis 大家都使用过, 可以安装在windows下, 也可以安装在linux下, 一般还是linux下安装比较多. 这里来介绍一下redis在linux下的安装 一. 下载 https:// ...

  9. Scrollanim – CSS3 & JavaScript 创建滚动动画

    Scrollanim 是结合 CSS3 和 JavaScript 来创建令人惊叹的滚动动画的开源库. Scrolanim 支持在页面上的所有可用的元素的位置.有很多的自定义参数可以配置使用,构建出精彩 ...

  10. js常用面试题整理

    1.array操作关键字: pop() 删除最后一个:push最后添加一个或者多个:reverse颠倒数组:shift删除第一个元素:unshift首部添加元素:concat衔接两个数组:join把数 ...