1、 hadoop中的压缩格式

压缩格式

文件扩展名

是否可分割

低 

 

BZIP2

.bz2


GZIP

.gz


LZO

.lzo

是(建立index)

LZ4

.LZ4


Snappy

.snappy


2、选择什么样的压缩方式?

对于压缩的好处可以从两方面考虑:Storage+Compute

1. Storage:基于HDFS考虑,减少了存储文件所占空间,提升了数据传输速率。

2. Compute:基于YARN上的计算(MapReduce/Hive/Spark/Flink/...)速度的提升。

不同的场景选择不同的压缩方式

1.如果选择高压缩比,那么对于cpu的性能要求要高,同时压缩、解压时间耗费也多;

2.选择压缩比低的,对于磁盘io、网络io的时间要多,空间占据要多

3.对于支持分割的,可以实现并行处理

ps:分片的理解:举个例子,对于一个未压缩1G的文件,hdfs默认的block大小为128M,那么这个文件会被分为8个block作为mapreduce的输入,每一个单独使用一个map任务。如果文件特别大,需要使用压缩,例如使用gzip压缩方式,在hdfs上依然存储为8个block,但是gzip不支持分割(不支持随机读),当mapreduce处理时,会把这个8个块分给一个map去处理,这样就会有很多非本地处理的map任务,丢失数据的本地性,如果使用bzip2压缩格式则可以避免。

3、压缩在hadoop的应用场景

总结在三方面:输入、中间、输出:hdfs==>map==>shuffle==>reduce

1.从hdfs读取文件进行mapReduce作业,如果数据很大,可以使用压缩并且选择支持分片的压缩方式(bzip2、lzo),可以实现并行处理,提高效率,减少磁盘读取时间,同时选择合适的存储格式例如Sequence Files、RC、ORC等。

2.map输出作为reduce的输入,需要经过shuffle这一过程,需要先把数据读取到缓冲区,然后在写入到本地磁盘,所以选择压缩可以减少存储文件所占空间,提升了数据传输速率,建议使用压缩速度快的压缩方式,例如Snappy和LZO。

3.如果作为归档处理,可以采用高压缩比方式(gzip、Bzip2),如果作为下个作业的输入,考虑是否分片。