Hadoop文件压缩Compression

编程入门 行业动态 更新时间:2024-10-26 08:28:22

Hadoop<a href=https://www.elefans.com/category/jswz/34/1762727.html style=文件压缩Compression"/>

Hadoop文件压缩Compression

为什么要用压缩?

  • 1.节省磁盘空间
  • 2.减少网络传输,减少shuffle

压缩与解压?

  • 压缩:原始数据 ==> 压缩 ==> 结果数据
  • 解压:结果数据 ==> 解压 ==> 原始数据

在大数据领域中使用压缩主要考虑三个方面:

  • Map端输入:从HDFS上面获取数据量变少,那么处理任务的时间也会相应变少

  • Map端输出:Map端输出数据发送到Reduce中,数据量变少,shuffle的数据变小,效率提高

  • Reduce端输出:Reduce数据写入到磁盘中,数据量变小,磁盘IO变小,效率提高

  • 总结:不仅是MapReduce,大数据中配置压缩需要考虑的是:输入、中间结果、输出

是否需要额外解压?

Hadoop 框架中MR底层就是支持解压的,这里我们不需要额外的操作解压成TextFile

java中的压缩接口:CompressionCodec

压缩的方法/*** Compress the in buffer to the out buffer.* @param in the bytes to compress* @param out the uncompressed bytes* @param overflow put any additional bytes here* @return true if the output is smaller than input* @throws IOException*/boolean compress(ByteBuffer in, ByteBuffer out, ByteBuffer overflow) throws IOException;解压的方法:/*** Decompress the in buffer to the out buffer.* @param in the bytes to decompress* @param out the decompressed bytes* @throws IOException*/void decompress(ByteBuffer in, ByteBuffer out) throws IOException;

如何选择压缩方式?

选择压缩方式的时候要从压缩比压缩时间来考虑,从而选择合适的压缩方式

常用压缩格式:

Compression formatToolAlgorithmFile extention
gzipgzipDEFLATE.gz
bzip2bzip2bzip2.bzp2
LZOLZOLZOLZO
SnappyN/ASnappy.snappy

更加详细信息如下

压缩格式UNIX工具算 法文件扩展名可分割
DEFLATEDEFLATE.deflateNo
gzipgzipDEFLATE.gzNo
LZ4LZ4.LZ4NO
bzipbzipbzip.bz2YES
LZOlzopLZO.lzoYES if indexed
SnappySnappy.snappyNO

hadoop中常用的codec

压缩方式对应主类
Zliborg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
Bzip2org.apache.hadoop.io.compress.Bzip2Codec
Lzocom.hadoop.compression.lzo.LzoCodec
Lz4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

各种压缩方式的压缩比:

各种压缩的压缩时间比较

各种压缩的压缩比较:

压缩格式优点缺点
gzip压缩比在四种压缩方式中较高;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便不支持split
lzo压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;需要在linux系统下自行安装lzop命令,使用方便压缩率比gzip要低;hadoop本身不支持,需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要指定inputformat为lzo格式)
snappy压缩速度快;支持hadoop native库不支持split;压缩比低;hadoop本身不支持,需要安装;linux系统下没有对应的命令d. bzip2
bzip2支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便压缩/解压速度慢;不支持native

总结

不同的场景选择不同的压缩方式,肯定没有一个一劳永逸的方法,如果选择高压缩比,那么对于cpu的性能要求要高,同时压缩、解压时间耗费也多;选择压缩比低的,对于磁盘io、网络io的时间要多,空间占据要多;对于支持分割的,可以实现并行处理。

压缩在hadoop中的应用:

Map端的输入:

MapReduce 从HDFS上面读取数据,如果不采用压缩的话,如果数据量过大会非常消耗性能
可以使用可分片的压缩比如Bzip2,或者使用可分片的数据结构比如SequenceFile,RCFile
比如我们1G的数据,如果支持切分,那么可以分成8个128M的块,用8个MapTask进行处理
如果不支持切分的话只能够用一个MapTask进行处理,效率可想而知。

Map端的输出及中间结果

Map阶段的输出结果溢写到磁盘上面并且需要进行网络传输,如果我们配置压缩去减少写入磁盘的数据量和网络传输的数据量,那么使用压缩后可以相应的提高效率。在此阶段我们可以使用更快速的压缩,比如Lzo,Snappy

Reduce端的输出
如果MR采用链式编程,在此过程中使用压缩从而减少写到磁盘上面的文件,这样可以节省更多的磁盘空间,也有助于效率的提高。

Bzip2 默认支持切分、Lzo默认不支持切分,创建索引后支持切分,所以Map端的输入应选择BZIP2

Map端的输出应该减少磁盘/网络的消耗,可以使用速度较快的Snappy和LZO压缩

Reduce端的输出需要节省磁盘空间,需要选择高压缩比的方式,如果是chain需要考虑分片

生产实践
core-site.xml

  • io.compression.codecs=true

  • io.compression.codec.bzip2.library

mapred-site.xml

  • mapreduce.output.fileoutputformat.compress
  • mapreduce.output.fileoutputformat.compress.codec
  • org.apache.hadoop.io.compress.DefaultCodec
  • mapreduce.map.output.compress
  • mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.DefaultCodec

Hive 中设置压缩:

SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;CREATE TABLE raw (line STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';CREATE TABLE raw_sequence (line STRING)STORED AS SEQUENCEFILE;LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK (see below)
INSERT OVERWRITE TABLE raw_sequence SELECT * FROM raw;

更多推荐

Hadoop文件压缩Compression

本文发布于:2023-07-28 20:16:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1298315.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件压缩   Hadoop   Compression

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!