Ubuntu HDFS压缩技术有哪些
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 | 否 | 中 | 中 | 一般不建议直接使用,常由上层封装 |
选型建议
- 追求解压速度与吞吐(如 mr 中间 shuffle、实时链路):优先 snappy 或 lz4。
- 追求最高压缩率(离线归档、冷数据):选 bzip2;若需可切分且速度可接受,选 lzo(建索引)。
- 通用文本/日志存储:选 gzip(注意其不可切分,单文件尽量接近块大小以利用并行)。
- 新项目希望兼顾压缩率与速度:评估 zstd(支持多级压缩等级,灵活权衡)。
快速配置与使用
-
启用编解码器
在 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”);
注意事项
- 不可切分格式(如 gzip/snappy/lz4/zstd/deflate)的大文件会限制 map 并行度;可通过“合理分片 + 多文件”或选用可切分格式(如 bzip2、索引后的 lzo)来提升并行。
- lzo 需安装编解码库并为文件建立索引(如使用 lzop 工具链),才能在 hdfs 上获得可切分读取能力。
- 若需使用 snappy/lzo/zstd 等 native 编解码器,确保集群节点安装相应库并在 hadoop 中正确声明 codec 类。
- 压缩以 cpu 换 io;在 cpu 紧张或实时性要求极高的链路,优先 lz4/snappy;在存储成本敏感场景,优先 gzip/bzip2/zstd。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu HDFS压缩技术有哪些
本文地址: https://pptw.com/jishu/774137.html
