十七、hadoop压缩相关

发布时间:2020-07-18 15:05:34 来源:51CTO 阅读:220 作者:隔壁小白 栏目:大数据

一、数据压缩在hadoop中的意义 1、基本概述

​ 压缩技术可以减少底层hdfs的读写字节数。并且能够降低在数据传输过程中占用的网络带宽资源,以及降低占用的磁盘空间。而在MapReduce中,shuffle以及merge过程都面临着巨大的IO压力。但是要注意增加了压缩,另外一方面会增加cpu的负载。所以在要权衡好是否采用压缩,以及采用的压缩算法的特性。

2、压缩应用基本原则

运算密集型的job,少用压缩。因为压缩占用cpu。
IO密集型的job,可用压缩减少数据量。
选择压缩算法时,要注意压缩比,压缩比越大,压缩以及解压时间越长。

二、MR支持的压缩编码格式 1、压缩编码 压缩格式 hadoop是否自带 算法 文件扩展名 可否可切分 换成压缩格式后,原来的程序是否需要修改
DEFAULT     DEFAULT   .deflate     与普通文本处理一样,不需要修改  
gzip     DEFAULT   .gz     与普通文本处理一样,不需要修改  
bzip2     bzip2   .bz2     与普通文本处理一样,不需要修改  
LZO   需另外安装   lzo   .lzo     需要建立索引文件,还需要指定输出格式  
snappy   需另外安装   snappy   .snappy     与普通文本处理一样,不需要修改  
2、不同压缩算法对应的编解码器 压缩格式 对应编解码器
DEFAULT   org.apache.hadoop.io.compress.DefaultCodec  
gzip   org.apache.hadoop.io.compress.GzipCodec  
bzip2   org.apache.hadoop.io.compress.BZip2Codec  
lzo   com.hadoop.compression.lzo.LzopCodec  
snappy   org.apache.hadoop.io.compress.SnappyCodec  
3、不同压缩算法的特性以及适用场景 (1)gzip

优点:
压缩率高,解压、压缩速度也必比较快。hadoop本身自带,在应用中处理gzip格式的文件就和直接处理文本一样。大部分Linux自带gzip命令,使用方便。

缺点:不支持split

适用场景:
当每个文件压缩之后在一个block左右的大小(因为无法分片),都可以考虑使用gzip将原数据压缩。例如可以将一天或者一小时的日志压缩成一个gzip文件,运行MapReduce的时候就可以并行处理多个gzip。hive,streaming,MapReduce程序处理压缩文件时,无需修改程序,就像处理文本文件一样。

(2)bzip2

优点:
支持split;高压缩比,比gzip高。hadoop自带,Linux下自带bzip2命令

缺点:压缩、解压速度慢,不支持native(java和C交互的api接口)

适用场景:
适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。

(3)lzo

优点:
压缩/解压速度比较快,压缩率合理(比gzip和bzip2小)。支持split,是hadoop中最流行的压缩格式。可以在Linux下可以通过安装lzop命令来使用

缺点:
压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

适用场景:
一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

(4)snappy

优点:压缩和解压速度快,合理的压缩率
缺点:不支持的split,压缩率比gzip要低;hadoop本身不支持,需要安装
适用场景:
当Mapreduce作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格式;或者作为一个Mapreduce作业的输出和另外一个Mapreduce作业的输入。

三、压缩的配置 1、适用范围

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。