对于MR作业,压缩中间数据,可以减少磁盘操作,减少网络传输数据量,进而提交查询速度。
对此整理下日常生活中出现的疑惑点。
hadoop对每个压缩格式的支持
hadoop下各种压缩算法的压缩比,压缩时间,解压时间对比
本地压缩库
考虑到性能,最好使用一个本地库(native library)来压缩和解压。
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 (建议开启,需单独安装)
对中间数据进行压缩可以减少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.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 (建议开启,需单独安装)
mapred.output.compression.type=BLOCK;
io.seqfile.compression.type=BLOCK(压缩性能最好,而且可以分割)
set hive.exec.compress.output=true;
Q:hadoop中间输出结果压缩对结果是否有影响?
Q:在MR中应该采用什么存储格式?
A:存储未压缩的文件时候,使用分割机制的压缩格式,如.bz2
使用支持压缩和分割的Sequence File(序列文件)。
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对每个压缩格式的支持
压缩格式 | 工具 | 算法 | 文件扩展名 | 多文件 | 可分割性 |
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
对中间数据进行压缩可以减少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.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 (建议开启,需单独安装)
mapred.output.compression.type=BLOCK;
压缩类型,NONE、RECORD、BLOCK(默认RECORD 记录级别)
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