ubuntu环境下的hdfs压缩技术概览
在 ubuntu 上部署的 hadoop/hdfs 支持多种压缩编解码器,用于降低存储占用并减少网络 io。常见内置编解码器包括:gzip(.gz)、bzip2(.bz2)、lzo(.lzo)、snappy(.snappy)、lz4、deflate(.deflate);部分发行版与版本还可选 zstd(zstandard)。下表汇总其关键特性与适用场景(是否可切分指按 hdfs 块并行读取的能力):
| 压缩格式 | 是否可切分 | 压缩率 | 速度 | 典型场景 |
|---|---|---|---|---|
| gzip | 否 | 高 | 中 | 通用存储、日志归档;单文件尽量接近块大小(如 ≤128–130mb) |
| bzip2 | 是 | 很高 | 慢 | 离线归档、极致节省空间 |
| lzo | 是(需建索引) | 中 | 快 | 大文件存储与查询,需索引后获得可切分 |
| snappy | 否 | 中 | 很快 | mr 中间结果、低延迟管道 |
| lz4 | 否 | 低–中 | 极快 | 实时/近实时链路、追求极致速度 |
| zstd | 否 | 中–高(可调) | 快(可调) | 新项目平衡压缩率与速度 |
| deflate | 否 | 中 | 中 | 一般不建议直接使用,常由上层封装 |
选型建议
快速配置与使用
启用编解码器
在 core-site.xml 配置 hadoop 可用编解码器(按需增减,如包含 zstd):
io.compression.codecs=org.apache.hadoop.io.compress.defaultcodec,org.apache.hadoop.io.compress.gzipcodec,org.apache.hadoop.io.compress.bzip2codec,org.apache.hadoop.io.compress.lzocodec,org.apache.hadoop.io.compress.snappycodec,org.apache.hadoop.io.compress.lz4codec,org.apache.hadoop.io.compress.zstdcodec
如使用 snappy,可显式声明:io.compression.codec.snappy.class=org.apache.hadoop.io.compress.snappycodec。
mapreduce 常用开关
mr 中间结果压缩:mapreduce.map.output.compress=true;mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.snappycodec(或 lz4/gzip)
作业输出压缩:mapreduce.output.fileoutputformat.compress=true;mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.gzipcodec(或所需 codec)。
命令行与作业示例
上传与查看:hadoop fs -put input_file.gz /path/;hadoop fs -ls /path/
作业内设置(示例为 gzip):
conf.set(“mapreduce.input.fileinputformat.input.compress”, “true”);
conf.set(“mapreduce.input.fileinputformat.input.compress.codec”, “org.apache.hadoop.io.compress.gzipcodec”);
conf.set(“mapreduce.output.fileoutputformat.compress”, “true”);
conf.set(“mapreduce.output.fileoutputformat.compress.codec”, “org.apache.hadoop.io.compress.gzipcodec”);
注意事项