Hadoop的数据压缩
一、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的数据压缩的更多相关文章
- hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...
- hadoop之数据压缩与数据格式
* 注:本文原创,转载请注明出处,本人保留对未注明出处行为的责任追究. a.数据压缩 优点: 1.节省本地空间 2.节省带宽 缺点: 花时间 1.MR中允许进行数据压缩的地方有三个: 1)input起 ...
- 【Hadoop】Hadoop的数据压缩方式
概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...
- hadoop2.2编程: 数据压缩
本文主要讨论hadoop的数据压缩与解压缩代码的书写 Compressing and decompressing streams with CompressionCodec import org.ap ...
- HADOOP与HDFS数据压缩格式
1.cloudera 数据压缩的一般准则 一般准则 是否压缩数据以及使用何种压缩格式对性能具有重要的影响.在数据压缩上,需要考虑的最重要的两个方面是 MapReduce 作业和存储在 HBase 中的 ...
- Hadoop(八)Hadoop数据压缩与企业级优化
一 Hadoop数据压缩 1.1 概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadood下,尤其是数据规模很大和工作负载密集的情况下,使用数据 ...
- Hadoop Hive概念学习系列之hive的数据压缩(七)
Hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直 ...
- Hadoop数据压缩技术
一.Hadoop数据压缩及其优缺点 1.压缩技术的好处与坏处 好处: 减少存储磁盘空间 降低IO(网络的IO和磁盘的IO) 加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度. 坏处: 由于使用 ...
- Hadoop优化之数据压缩
bBHadoop数据压缩 概述 运行hadoop程序时,I/O操作.网络数据传输.shuffle和merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,这个时候,使用数据压缩可以提高效率 ...
随机推荐
- Angular记录(4)
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
- vue开发常用配置
// src/main.js function setHtmlFontSize() { const baseSize = 100 // 由于浏览器字体最小为12px,故这个值要设置大一点,保证计算所得 ...
- 深入浅出mybatis之缓存机制
目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...
- Android屏幕设置只允许上下旋转
android:screenOrientation = ["unspecified" | "behind" | ...
- GBDT原理及利用GBDT构造新的特征-Python实现
1. 背景 1.1 Gradient Boosting Gradient Boosting是一种Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向.损失函数是 ...
- 第十二节,OpenCV学习(一)图像的读取、显示、保存
一.读取图像 所谓的图像就是一个数组,对图像的处理就是对数字的处理 import cv2 import numpy as np img = cv2.imread('dog.jpg') print(im ...
- java学习笔记03-基本语法
编写java程序时,应注意以下点: 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类名由若干单词组成,那么每个 ...
- c++消息队列的实现
#ifndef NET_FRAME_CONCURRENT_QUEUE_H #define NET_FRAME_CONCURRENT_QUEUE_H #include <queue> # ...
- Centos6.8安装php5.6
检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们, 如: yum remove php.x86_64 php-cli.x86_64 ...
- Django-路由控制
Django-路由控制 一.URL路由基础 URL是web服务的路口,用户通过浏览器发送过来的任何请求都会被发送到一个指定的URL地址里,然后被响应. 在django项目中编写路由就是向外暴露我们接收 ...