Hadoop支持多种压缩编码,每种编码都有其独特的优缺点和适用场景。以下是Hadoop常用的一些压缩编码及其简要描述:
GZIP:
- 优点:压缩率比较高(大于30%),且压缩/解压速度也相对较快。Hadoop本身支持GZIP,因此处理GZIP格式的文件与直接处理文本类似。大部分Linux系统都自带gzip命令,使用方便^[1][2][3][4]^。
- 缺点:不支持split^[1][2][3][4]^。
- 应用场景:当每个文件压缩后在130M以内(即一个块大小内)时,可以考虑使用GZIP压缩格式。例如,可以将一天或一个小时的日志压缩成一个GZIP文件,然后运行MapReduce程序时通过多个GZIP文件达到并发^[1][3][4]^。
BZIP2:
- 优点:压缩比高,支持split,支持多文件。Hadoop内置支持BZIP2^[1][2][4]^。
- 缺点:压缩/解压速度相对较慢^[1][2][4]^。
- 应用场景:适用于对处理速度要求不高的场景,如Map输出结果^[2][3]^。
LZO:
- 优点:压缩/解压速度比较快,合理的压缩率(< 50%),支持split(但需要建立索引,且文件修改后需要重新建索引)。Hadoop本身不支持LZO,但可以通过安装相应的库来使用。在Linux系统下可以安装lzop命令,使用方便^[1][2][4]^。
- 缺点:压缩率比GZIP要低一些。Hadoop本身不支持,需要安装;在应用中对LZO格式的文件需要做一些特殊处理^[1][2][4]^。
- 应用场景:适用于经常访问的热数据,尤其是当文件大小较大时,LZO的优点更为明显^[1][2][4]^。
LZ4:
- 优点:压缩比一般,不支持split,但压缩/解压速度快,支持Hadoop Native库。Hadoop本身不支持LZ4,需要安装^[1][2]^。
- 缺点:不支持split^[1][2]^。
- 应用场景:适用于Map中间结果的压缩^[2]^。
Snappy:
- 优点:高速压缩速度和合理的压缩率,支持Hadoop Native库^[1][2][4]^。
- 缺点:不支持split;压缩率比GZIP要低;Hadoop本身不支持,需要安装;Linux系统下没有对应的命令^[1][2][4]^。
- 应用场景:当MapReduce作业的map输出的数据比较大时,可以作为map到reduce的中间数据的压缩格式;或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入^[2][4]^。
Zstd:
- 优点:压缩比高,与GZIP相当;不支持split,但压缩/解压速度快,支持Hadoop Native库。Hadoop本身不支持Zstd,需要安装^[2]^。
- 缺点:不支持split^[2]^。
- 应用场景:适用于Map中间结果的压缩^[2]^。
在选择Hadoop的压缩编码时,需要根据具体的应用场景和需求进行权衡。例如,对于运算密集型的作业,可能不需要过多使用压缩;而对于IO密集型的作业,则可能需要更多地使用压缩来优化性能^[3]^。
参考:
1.
hadoop常见压缩格式 hadoop常用压缩算法对比_mob6454...
2.
Hadoop 常用的压缩算法有哪些,有什么区别dubbo支持哪些压缩...
3.
Hadoop数据压缩总结压缩格式支持mr切分-CSDN博客
4.
hadoop-2.7.3源码编译后支持的4种压缩格式 - ZC_Surpass