Hadoop的数据压缩

摘要:
一、Hadoop的数据压缩1.概述在进行MR程序的过程中,在Mapper和Reducer端会发生大量的数据传输和磁盘IO,如果在这个过程中对数据进行压缩处理,可以有效的减少底层存储读写的字节数,,并且通过减少Map和Reduce阶段数据的输入输出来提升MR程序的速度,提高了网络带宽和磁盘空间的效率;数据压缩可以有效的节省资源,它是MR程序的优化策略之一;  数据压缩会增加cpu的计算负担,但是能很大程度较少磁盘的IO。

一、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.编码解码器

DEFAULTorg.apache.hadoop.io.compress.DefaultCodeC
Gziporg.apahce.hadoop.io.compress.GzioCodeC
bzop2org.apache.hadoop.io.compress.bzio2CodeC
LZOcom.apache.hadoop.compression.lzoCodeC
Snappyorg.apache.hadoop.io.compress.SnappyCodeC

5.压缩性能

压缩格式原始文件压缩后文件压缩速度解压速度
Gzip8.3G1.8G17.5MB/s58MB/s
bzip28.3G1.1G2.4MB/s9.5MB/s
LZO8.3G2.9G49MB/s74.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的数据压缩》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇多线程(一)java并发编程基础知识maven处理jar包冲突下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Apache使用.htaccess防盗链禁止用户下载

今天遇到一个客户,做视频站的,用的是Html5播放器,最开始想隐藏真实地址,尝试了很多办法都没办法隐藏,最后尝试CK切段处理,但是用户体验效果不好,切段多了会出现卡顿情况。 最后没办法和客户商议后决定采用防盗链,禁止非绑定的域名访问下载视频,同样看了很多教程,完全是一脸懵逼不知道怎么操作。 只能不断尝试,最后还是给解决了,方法如下 SetEnvIfNoCa...

Hadoop—MapReduce计算气象温度

Hadoop—MapReduce计算气象温度 1 运行环境说明 1.1 硬软件环境 主机操作系统:Mac OS 64 bit ,8G内存 虚拟软件:Parallers Desktop12 虚拟机操作系统:CentOS 64位,单核,512内存 JDK:java version "1.7.0_45" Hadoop:1.1.2 1.2 机器网络环境 集群包...

linux下卸载apache方法小结

方法一 代码如下: 1.root@server ~]# rpm -qa|grep httpdhttpd-2.2.3-11.el5_2.centos.4httpd-manual-2.2.3-11.el5_2.centos.4 说明:rpm –qa | grep httpd命令是为了把httpd相关的包都列出来, 我上面的例子是Linux默认安装apache...

JMeter3.0(三十八)图形化HTML报告中文乱码问题处理(转载)

转载自 http://www.cnblogs.com/yangxia-test 由于个人在JMeter 3.0的实际应用中,脚本中的Test Plan/Sampler等元件命名都没有使用中文,所以在之前介绍Dashboard Report特性的博客(原文戳这里))成文时,没有提到关于中文的问题。之后有朋友反馈,Sampler名称为中文时,生成的报告中展示为...

ZeroCopyLiteralByteString cannot access superclass

问题描述         在HBase上运行MapReduce作业时,报如下异常:IllegalAccessError: class com.google.protobuf.HBaseZeroCopyByteString cannot access its superclass com.google.protobuf.LiteralByteString  ...

Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

一、添加插件 将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中 二、在Windows上安装Hadoop2.7.5 版本最好与Linux集群中的hadoop版本保持一致 1、将hadoop-2.7.5-centos-6.7.tar.gz解压到Windows上的C盘software目录中 2、配置h...