[原][hadoop2.7.1]I/O之压缩
先来看下类图(hadoop2.7.1):
对照类图,对每一种压缩算法做个简单介绍:
DeflateCodec(DEFLATE)
hadoop2.7.1中实际上就是DefaultCodec。
它同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
人们普遍认为DEFLATE不受任何专利所制约,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了在ZIP文件格式中得到应用之外也在gzip压缩文件以及PNG图像文件中得到了应用。
DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。
更高压缩率的DEFLATE是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。
哈夫曼编码(Huffman Coding)
是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种,用于无损数据压缩的熵编码(权编码)。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
LZ77
“字典”的思路相当简单,我们日常生活中就经常在使用这种压缩思想。我们常常跟人说“奥运会”、“IBM”、“TCP”之类的词汇,说者和听者都明白它们指的是“奥林匹克运动会”、“国际商业机器公司”和“传输控制协议”,这实际就是信息的压缩。我们之所以可以顺利使用这种压缩方式而不产生语义上的误解 ,是因为在说者和听者的心中都有一个事先定义好的缩略语字典,我们在对信息进 行压缩(说)和解压缩(听)的过程中都对字典进行了查询操作作。字典压缩模型正是基于这一思路设计实现的。
GzipCodec(gzip)
是以DEFLATE算法为基础扩展出来的一种算法。