一、Hadoop的数据压缩

  1.概述

    在进行MR程序的过程中,在Mapper和Reducer端会发生大量的数据传输和磁盘IO,如果在这个过程中对数据进行压缩处理,可以有效的减少底层存储(HDFS)读写的字节数,,并且通过减少Map和Reduce阶段数据的输入输出来提升MR程序的速度,提高了网络带宽和磁盘空间的效率;

    数据压缩可以有效的节省资源,它是MR程序的优化策略之一;  

    数据压缩会增加cpu的计算负担,但是能很大程度较少磁盘的IO。由于数据压缩占用cpu资源很小,总体还是利大于弊的。

  2.数据压缩使用原则:

    运算密集型的任务尽量少用压缩、IO密集型的任务多用压缩。

  3.MapReduce支持的压缩编码

hadoop中的压缩格式 是否自带 文件的拓展名 是否可以切分
DEFAULT .default
Gzip .gz
bzip2 .bz2
LZO .lzo
Snappy .snappy

  4.编码解码器

DEFAULT org.apache.hadoop.io.compress.DefaultCodeC
Gzip org.apahce.hadoop.io.compress.GzioCodeC
bzop2 org.apache.hadoop.io.compress.bzio2CodeC
LZO com.apache.hadoop.compression.lzoCodeC
Snappy org.apache.hadoop.io.compress.SnappyCodeC

  5.压缩性能

压缩格式 原始文件 压缩后文件 压缩速度 解压速度
Gzip 8.3G 1.8G 17.5MB/s 58MB/s
bzip2 8.3G 1.1G 2.4MB/s 9.5MB/s
LZO 8.3G 2.9G 49MB/s 74.6MB/s

二 、Hadoop压缩的使用

  1.应用在WordCount程序中

   1)在map端对数据进行压缩

    在Driver类中的获取job对象后加入配置信息:

//开启map端的输入压缩
conf.setBoolean("mapreduce.map.output.compress",true); //设置压缩方法
//默认
conf.setClass("mapreduce.map.output.compress.codec",DefaultCodeC.class,CompressionCodec.class);
//Bzip2
conf.setClass("mapreduce.mapt.output.compress.codec",Bzip2Codec.class,CompressionCode.class);
//LZO
conf.setClass("mapreduce.map.output.compress.codec".LZOCodec.class,CompressionCodec.class);

    注意:在map端开启压缩并不能从结果文件中看到结果的改变,只要程序运行成功就代表设置没问题!

   2)在reduce端对数据进行压缩

    在设置reduce输出数据类型之后加入配置信息:

//开启reduce端的输出压缩
FileOutputFormat.setCompressOutput(job,true);
//设置压缩方法
//默认
FileOutputFormat.setOutputCompressorClass(job,DefaultCodec.class);
//Bzip2
FileOutputFormat.setOutputCompressorClass(job,Bzip2Codec.class);
//Gzip
FileOutputFormat.setOutputCompressorClass(job,GzipCodec.class);

    三种选择一种即可,可以看到对应的结果文件看到被压缩的结果文件。

  2.自定义压缩方法

/**
* @author: PrincessHug
* @date: 2019/4/8, 9:49
* @Blog: https://www.cnblogs.com/HelloBigTable/
*/
public class TestCompress {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Compress("G:\\weblog.log","org.apache.hadoop.io.compress.BZip2Codec");
} //自定义压缩方法
private static void Compress(String fileName,String method) throws IOException, ClassNotFoundException {
//获取输入流
FileInputStream fis = new FileInputStream(new File(fileName)); //通过反射获取压缩方法并初始化
Class cName = Class.forName(method);
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(cName, new Configuration()); //定义输出流
FileOutputStream fos = new FileOutputStream(new File(fileName + codec.getDefaultExtension())); //创建压缩输出流
CompressionOutputStream cos = codec.createOutputStream(fos); //流的拷贝
IOUtils.copyBytes(fis,cos,2*1024*1024,false); //关闭资源
fis.close();
cos.close();
fos.close();
}
}

  

  

Hadoop的数据压缩的更多相关文章

  1. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

  2. hadoop之数据压缩与数据格式

    * 注:本文原创,转载请注明出处,本人保留对未注明出处行为的责任追究. a.数据压缩 优点: 1.节省本地空间 2.节省带宽 缺点: 花时间 1.MR中允许进行数据压缩的地方有三个: 1)input起 ...

  3. 【Hadoop】Hadoop的数据压缩方式

    概述 ​ 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...

  4. hadoop2.2编程: 数据压缩

    本文主要讨论hadoop的数据压缩与解压缩代码的书写 Compressing and decompressing streams with CompressionCodec import org.ap ...

  5. HADOOP与HDFS数据压缩格式

    1.cloudera 数据压缩的一般准则 一般准则 是否压缩数据以及使用何种压缩格式对性能具有重要的影响.在数据压缩上,需要考虑的最重要的两个方面是 MapReduce 作业和存储在 HBase 中的 ...

  6. Hadoop(八)Hadoop数据压缩与企业级优化

    一 Hadoop数据压缩 1.1 概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadood下,尤其是数据规模很大和工作负载密集的情况下,使用数据 ...

  7. Hadoop Hive概念学习系列之hive的数据压缩(七)

    Hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直 ...

  8. Hadoop数据压缩技术

    一.Hadoop数据压缩及其优缺点 1.压缩技术的好处与坏处 好处: 减少存储磁盘空间 降低IO(网络的IO和磁盘的IO) 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度. 坏处: 由于使用 ...

  9. Hadoop优化之数据压缩

    bBHadoop数据压缩 概述 运行hadoop程序时,I/O操作.网络数据传输.shuffle和merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,这个时候,使用数据压缩可以提高效率 ...

随机推荐

  1. 分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比

    分布式协调服务Zookeeper集群监控JMX和ZkWeb应用对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. JMX是用来远程监控Java应用的框架,这个也可以用来监控其他的J ...

  2. java eclipse中使用wsdl生成soap 的客户端代码

    项目右键--> new --> other finish完成

  3. Python——使用高德API获取POI(以深圳南山医疗保健服务POI为例)

    以下内容为原创,转载请注明出处. import xlwt #创建Excel,见代码行8,9,11,25,28:CMD下:运行pip install xlwt进行安装 import urllib.req ...

  4. 蓝桥杯入门训练-Fibonacci数列

    刚刚开始刷题的时候就栽了个大跟头,稍微记一下...... 一开始不是很理解:“我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数 ...

  5. Linux二进制安装apache2.4.25

    Linux二进制安装apache2.4.25 安装环境:CentOS 6.2 先检查是否安装了Apache 如通是通过rpm包安装的话直接用下面的命令:rpm -q httpd 也可以使用如下两种方法 ...

  6. PostgreSQL学习笔记(二)-安装pgAdmin

    继上篇安装PostgreSQL后,我们需要安装一个PostgreSQL的图形化管理工具. pgadmin管理工具 创建Python的虚拟环境 cd /root/venv python -m venv ...

  7. day08 文件操作

    1.三种字符串: (1)u'' 普通字符串 ---> u'abc' ---> 默认的文本方式,以字符作为文本的输出方式 (2)b'' 二进制字符串 ---> b'ASCII码' -- ...

  8. 文件比较与同步工具——FreeFileSync

    1. 基本介绍 FreeFileSync是一个用于文件同步的免费开源程序.FreeFileSync通过比较其内容,日期或文件大小上的一个或多个文件夹,然后根据用户定义的设置同步内容.除了支持本地文件系 ...

  9. Java线程池(待续)

    线程池是预先创建线程的一种技术..线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,即均为启动,不消耗CPU,而只是占用较小的内存空间.当请求到来之后,缓冲池给 ...

  10. [Linux]返回被阻塞的信号集

    一.概述 在另一篇实例说到,进程可以屏蔽它不想接收的信号集. 事实上这些被屏蔽的信号只是阻塞在内核的进程表中,因为他们不能递送给进程,所以状态是未决的(pending). 利用sigpending函数 ...