压缩方式有Gzip、Bzip2、LZO、Snappy压缩等几种方式,他们的优缺点分别为:
1.Gzip压缩:Hadoop自带的压缩方式,不支持切片,压缩比率高,但压缩速度慢;
应用场景:
(1)因为不支持切片,所以可以用在“当每个文件压缩之后都不超过130M以内的(一个块大小内)的场景。”
2.Bzip2压缩:Hadoop自带的压缩方式,支持切片,压缩率很高,比Gzip还高,但压缩速度很慢,毕竟慢工出细活;
应用场景:
(1)适合对速度要求不高,但需要较高的压缩率的时候
(2)输出的数据比较大,需要压缩存档减少磁盘空间并且以后数据用的少的情况(冷数据)
(3)单个很大的文本文件想压缩来减少存储空间,同时又需要支持Split。
3.LZO压缩:Hadoop默认不支持LZO,需要手动配置才可以使用,支持切片,压缩率介于Gzip和Snappy之间,压缩速度也较快。
应用场景:
(1)当一个文本文件很大时,压缩之后还大于200M以上的可以考虑,而且单个文件越大,LZO有点越明显。
4.Snappy压缩:Hadoop自带的压缩方式,不支持切片,压缩率较低,但压缩速度特别快。
应用场景:
(1)当Map输出的数据较大,作为Map到Reduce的中间数据的压缩格式
(2)作为一个MapReduce作业的输出(reduce)和另一个MapReduce作业的输入(Map)
提示: 如果面试过程问起,我们一般回答压缩方式为
Snappy
,特点速度快,缺点无法
切分(可以回答在链式
MR
中,
Reduce
端输出使用
bzip2
压缩,以便后续的
map
任务对数
据进行
split
)
项目经验之
LZO
压缩
Hadoop
默认不支持
LZO
压缩,如果需要支持
LZO
压缩,需要添加
jar
包,并在
hadoop
的
cores-site.xml
文件中添加相关压缩配置。