1.压缩
在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 |
2.存储格式
---未完-----