Hadoop 压缩格式

压缩策略

Hadoop应用处理的数据集非常大,因此需要借助于压缩。使用哪种压缩格式与待处理的文件的大小、格式和所使用的工具相关。下面有一些建议,大致是按照效率从高到低排列的。

  • 使用容器文件格式,例如顺序文件、Avro数据文件、ORCFiles或者Parquet文件,所有这些文件格式同时支持压缩和切分。通常最好与一个快速压缩工具联合使用,例如LZO,LZ4,或者Snappy。
  • 使用支持切分的压缩格式,例如bzip2(尽管bzip2非常慢),或者使用通过索引实现切分的压缩格式,例如LZO。
  • 在应用中将文件切分成块,并使用任意一种压缩格式为每个数据块建立压缩文件(不论他是否支持切分)。这种情况下,需要合理选择数据块的大小,以确保压缩后数据块的大小近似于HDFS块的大小。
  • 存储未经压缩的文件。

        对大文件来说,不要使用不支持切分整个文件的压缩格式,因为会失去数据的本地特性,进而造成MapReduce应用效率低下。

Hadoop 压缩格式_第1张图片


1)Gzip压缩

优点:压缩率比较高,压缩/解压速度也比较快,hadoop本身支持。

缺点:不支持分片。

应用场景:当每个文件压缩之后在1个block块大小内,可以考虑用gzip压缩格式。

 

2)lzo压缩

优点:压缩/解压速度也比较快,合理的压缩率,支持分片,是Hadoop中最流行的压缩格式,支持Hadoop native库。

缺点:压缩率比gzip要低一些,Hadoop本身不支持,需要安装,如果支持分片需要建立索引,还需要指定inputformat改为lzo格式。

应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越明显。

 

3)snappy压缩

优点:支持Hadoop native库,高速压缩速度和合理的压缩率。

缺点:不支持分片,压缩率比gzip要低,Hadoop本身不支持,需要安装。

应用场景:当MapReduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式。

 

4)bzip2压缩

优点:支持分片,具有很高的压缩率,比gzip压缩率都高,Hadoop本身支持,但不支持native。

缺点:压缩/解压速度慢,不支持Hadoop native库。

应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式,输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况。

 

总结:压缩比:bzip2 > gzip > lzo > snappy ,压缩速度:snappy > lzo> gzip > bzip2


容器文件格式

在Hadoop中,我们可以使用容器文件格式,例如 sequenceFile,RCFile或者Avro file。所有这些文件格式同时支持压缩和切分。因此使用这些文件也可以解决数据分片的问题。


Snappy文件块不可拆分,但是在container file format里面的Snappy块是可以拆分的,例如Avro和SequenceFile。Snappy一般也需要和一个container file format一起使用。


参考 : 

https://blog.csdn.net/OnlyQi/article/details/50905827

https://blog.csdn.net/ddumax/article/details/53282495

你可能感兴趣的:(Hadoop 压缩格式)