hadoop&hive压缩相关说明

对于MR作业,压缩中间数据,可以减少磁盘操作,减少网络传输数据量,进而提交查询速度。
对此整理下日常生活中出现的疑惑点。

hadoop对每个压缩格式的支持
 压缩格式  工具  算法  文件扩展名  多文件  可分割性
 DEFLATE  无  DEFLATE  .deflate  不  不
 gzip  gzip  DEFLATE  .gz  不  不
 ZIP  zip  DEFLATE  .zip  是  是,在文件范围内
 bzip2  bzip2  bzip2  .bz2  不  是
 LZO  lzop  LZO  .lzo  不  是
Snappy snappy Snappy .snapyy  不  是


hadoop下各种压缩算法的压缩比,压缩时间,解压时间对比

压缩算法 原始文件大小  压缩后的文件大小  压缩速度 解压缩速度 
gzip   8.3GB   1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset  8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 49.3MB/S 74.6MB/s


本地压缩库
考虑到性能,最好使用一个本地库(native library)来压缩和解压。
 压缩格式  Java实现   本地实现 
 DEFLATE  是  是
 gzip  是  是
 bzip2  是  否
 LZO  否  是 


hadoop job中间输出结果压缩
mapred.compress.map.output=true;
mapred.map.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec (hadoop默认)
mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec (建议开启)
mapred.map.output.compression.codec= org.apache.hadoop.io.compress.LzoCodec (建议开启,需单独安装)

mapred.map.output.compression.codec= org.apache.hadoop.io.compress.GzipCodec

mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec 


hive中间结果进行压缩
对中间数据进行压缩可以减少map和reduce task间的数据传输量。对于中间数据压缩,选择一个低cpu开销的编/解码器要比选择一个压缩率高的编/解码器要重要的多。
hive.exec.compress.intermediate=true;
mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec (建议开启)
mapred.map.output.compression.codec= org.apache.hadoop.io.compress.LzoCodec (建议开启,需单独安装)


对hive的最终输出结果进行压缩
hive.exec.compress.output=true;
mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec  
mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec (建议开启)
mapred.output.compression.codec= org.apache.hadoop.io.compress.LzoCodec (建议开启,需单独安装)


hadoop输出结果以块分割
mapred.output.compression.type=BLOCK;

压缩类型,NONE、RECORD、BLOCK(默认RECORD 记录级别)


hive输出结果以块、二进制分割
io.seqfile.compression.type=BLOCK(压缩性能最好,而且可以分割)
set hive.exec.compress.output=true;

建议由hive生成的中间表,都以creat table …stored as seqeuncefile创建,支持压缩,可切分



Q:hadoop中间输出结果压缩对结果是否有影响?

A:没有影响,对于IO型作业,相反可以加快查询速度。


Q:在MR中应该采用什么存储格式?
A:存储未压缩的文件时候,使用分割机制的压缩格式,如.bz2
使用支持压缩和分割的Sequence File(序列文件)。

对于大型文件,不要对整个文件使用不支持分割的压缩格式,这样子会损失本地优势,降低MR性能。



Q:推荐hive生产环境参数设置?
A:mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec  中间结果压缩方法
mapred.output.compression.type=BLOCK块级别分割
io.seqfile.compression.type=BLOCK块级别分割
hive.exec.compress.intermediate=true            hive中间结果压缩
//hive.exec.compress.output=true输出结果压缩
//mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec   输出结果压缩方法



参考文献:
hive中间结果和结果的压缩: http://blog.csdn.net/inte_sleeper/article/details/7572235
hadoopMR压缩详解: http://www.cnblogs.com/ggjucheng/archive/2012/04/22/2465580.html  






你可能感兴趣的:(hadoop&hive压缩相关说明)