一.背景
在Hadoop中,个别存储着十分大的文件,以及在存储HDFS块或运行MapReduce工作时,Hadoop集群中节点之间的存在大量数据传输。 如果条件容许时,尽量减少文件大小,这将有助于缩小存储需要以及缩小网络上的数据传输。
二. Hadoop反对的压缩算法
Haodop对文件压缩均实现org.apache.hadoop.io.compress.CompressionCodec接口,所有的实现类都在org.apache.hadoop.io.compress包下
1. 压缩算法比拟
有不少的压缩算法能够利用到Hadoop中,但不同压缩算法有各自的特点。
存放数据到HDFS中,能够抉择指定的压缩形式,在MapReduce程序读取时,会依据扩展名主动解压。例如:如果文件扩大名为.snappy,Hadoop框架将主动应用SnappyCodec解压缩文件。
整体排序如下:
Snappy < LZ4 < LZO < GZIP < BZIP2,但压缩比越高,压缩的工夫也会更长。以下是局部参考数据
2. HDFS压缩如何抉择
既然压缩可能节俭空间、而且能够晋升IO效率,那么是否将所有数据都以压缩格局存储在HDFS中呢?例如:bzip2,而且文件是反对切分的。
- 如果文件是不可切分的,只有一个CPU在解决所有的文件,其余的CPU都是闲暇的。如果HDFS中的block和文件大小差不多还好,一个文件、一个块、一个CPU。如果是一个很大的文件就会呈现问题了
- bzip2在压缩和解压缩数据方面实际上均匀比Gzip差3倍,这对性能是有肯定的影响的。如果咱们须要频繁地查问数据,数据压缩肯定会影响查问效率
- 如果不关怀查问性能(没有任何SLA)并且很少抉择此数据,则bzip2可能是不错的抉择。最好是对本人的数据进行基准测试,而后再做决定。