压缩方式有 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 文件中添加相关压缩配置。