压缩类型 | 工具 | 算法 | 文件名后缀 | 可分割 |
DEFLAT | 无 | DEFLAT | .deflat | 不 |
gzip | gzip | DEFLAT | .gz | 不 |
bzip2 | bzip2 | bzip2 | .bz2 | 可 |
LZO | Lzop | LZO | .lzo | 不 |
LZ4 | 无 | LZ4 | .lz4 | 不 |
Snappy | 无 | Snappy | .snappy | 不 |
比较而言,gzip在对时间与空间的处理问题上更加均衡一些。相对gzip来说,
bzip2压缩效率更高,比gzip效率更高,压缩后的文件占据的空间更小,但是其
需要的时间更长
在HDFS文件格式,文件时分割在一个个不同的block中进行存储。而gzip是不
可分割的,那么如果采用gzip作为压缩工具,将文件切割成多个block,会发现
程序部能运行,其原因是系统默认的DEFLATE算法(gzip的核心算法)在压缩过
程中将数据进行连续的非指向性排列,若从其中一个位置被分割,那么无法确
保FileSystem实例在获取完一个单独的block后,能够及时准确地获取接下来的那
一个连续的block位置。
但gzip压缩后的大文件可以被Hadoop以串联的方式存储在同一个节点中连续
的block中,即所有的数据都以链式的结构存储在同一个节点上,Hadoop做的仅
仅是对容量进行了压缩。只是由于其后续处理需要对文件进行读取操作时,所
有存储有数据的block将会一次由同一个数据输入任务来处理。