温馨提示×

Ubuntu HDFS压缩技术有哪些

小樊
38
2025-12-16 20:35:38
栏目: 智能运维

ubuntu环境下的hdfs压缩技术概览

ubuntu 上部署的 hadoop/hdfs 支持多种压缩编解码器,用于降低存储占用并减少网络 io。常见内置编解码器包括:gzip(.gz)bzip2(.bz2)lzo(.lzo)snappy(.snappy)lz4deflate(.deflate);部分发行版与版本还可选 zstd(zstandard)。下表汇总其关键特性与适用场景(是否可切分指按 hdfs 块并行读取的能力):

压缩格式 是否可切分 压缩率 速度 典型场景
gzip 通用存储、日志归档;单文件尽量接近块大小(如 ≤128–130mb
bzip2 很高 离线归档、极致节省空间
lzo 是(需建索引) 大文件存储与查询,需索引后获得可切分
snappy 很快 mr 中间结果、低延迟管道
lz4 低–中 极快 实时/近实时链路、追求极致速度
zstd 中–高(可调) 快(可调) 新项目平衡压缩率与速度
deflate 一般不建议直接使用,常由上层封装

选型建议

  • 追求解压速度与吞吐(如 mr 中间 shuffle、实时链路):优先 snappylz4
  • 追求最高压缩率(离线归档、冷数据):选 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

0