在Hadoop中MR一共支持四种编码分别是:default,gzip,bzip2,lzo和snappy
下面是这几种压缩格式的说明:
压缩格式 | 工具 | 算法 | 后缀名 | 是否可切分 |
default | 无 | default | .deflate | 不可以切分 |
gzip | gzip | default | .gzp | 不可以切分 |
bzip2 | bzip2 | bzip2 | bz2 | 可以切分 |
lzo | lzo | lzo | .lzo | 可以切分 |
snappy | 无 | snappy | .snappy | 不可以切分 |
下面是各个压缩算法之间的比较(目前仅比较了gzip,bzip2,lzo三种格式)
压缩格式 | 文件大小 | 压缩后大小 | 压缩速度 | 解压速度 |
gzip | 8.3g | 1.8g | 17.5m/s | 58m/s |
bzip2 | 8.3g | 1.1g | 2.4m/s | 9.5m/s |
lzo | 8.3g | 2.9g | 49.5m/s | 74.5m/s |
我们不难得出结论:
压缩后文件大小:lzo>gzip>bzip2
压缩速度:lzo>gzip>bzip2
解压速度:lzo>gzip>bzip2
所以如果追求节省存储空间可以选择bzip2,但是如果追求速度的话那就选择lzo,当然介于两者之间的gzip也是很好的选择,压缩格式本就没有好坏之分,一切由实际场景的业务来决定。
要在Hadoop中启用压缩,可以配置如下参数(mapred-site.xml文件中):
参数 |
默认值 |
阶段 |
建议 |
io.compression.codecs (在core-site.xml中配置) |
org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.Lz4Codec |
输入压缩 |
Hadoop使用文件扩展名判断是否支持某种编解码器 |
mapreduce.map.output.compress |
false |
mapper输出 |
这个参数设为true启用压缩 |
mapreduce.map.output.compress.codec |
org.apache.hadoop.io.compress.DefaultCodec |
mapper输出 |
使用LZO、LZ4或snappy编解码器在此阶段压缩数据 |
mapreduce.output.fileoutputformat.compress |
false |
reducer输出 |
这个参数设为true启用压缩 |
mapreduce.output.fileoutputformat.compress.codec |
org.apache.hadoop.io.compress. DefaultCodec |
reducer输出 |
使用标准工具或者编解码器,如gzip和bzip2 |
mapreduce.output.fileoutputformat.compress.type |
RECORD |
reducer输出 |
SequenceFile输出使用的压缩类型:NONE和BLOCK |
原文:https://www.cnblogs.com/xxfxxf/p/11886400.html