在 Ubuntu 上应用 HBase 压缩的完整指南
一 前置条件与算法选择
- 确认运行环境:建议使用 Ubuntu 20.04/22.04、Java 8、已部署 HBase(单机或伪分布式/分布式均可)。HBase 列族可同时配置 Data Block Encoding 与 Compression,两者作用于列族层级,可单独或组合使用。常见组合是:编码用 FAST_DIFF,压缩用 SNAPPY,在节省空间的同时兼顾扫描与随机读性能。HBase 默认支持的压缩算法包含 NONE、GZ、SNAPPY。
二 安装系统依赖与库
- 安装 Snappy 本地库(推荐):在 Ubuntu 上执行
- sudo apt-get update
- sudo apt-get install -y libsnappy-dev
- 如需使用 LZO(GPL 许可,按需部署):
- sudo apt-get install -y liblzo2-dev
- 将 LZO 相关 JAR(如 hadoop-gpl-compression-0.2.0-dev.jar)放入 HBase/lib,并按需配置 io.compression.codecs/io.compression.codec.lzo.class 与 native 库路径(LZO 部署步骤较多,生产上更常优先采用 Snappy/GZ/LZ4)。
三 配置 HBase 使用压缩
四 验证与生效策略
- 验证列族配置是否生效
- hbase shell 中执行:describe ‘t1’,在输出中检查列族 f1 的 COMPRESSION 与 DATA_BLOCK_ENCODING 是否为设定值。
- 让存量数据也使用新压缩
- 压缩发生在 flush/compaction 阶段。为使历史 HFile 转为新压缩,需触发 major compaction(建议先在测试环境评估影响):
- major_compact ‘t1’(对整表)
- major_compact ‘t1’,‘f1’(对指定列族)
- 观察 HFile 是否按新算法压缩,以及 StoreFile 数量与大小变化。
五 性能与存储取舍建议
- 压缩比与速度:通常 GZIP 压缩比最高但 CPU 开销大;SNAPPY/LZ4 以速度见长、压缩比略低;LZO 速度接近 LZ4、压缩比通常略逊于 Snappy。多数在线业务优先选择 SNAPPY 或 LZ4 以平衡吞吐与 CPU。
- 编码与压缩的协同:先通过 Data Block Encoding(如 FAST_DIFF) 消除 Key 重复,再进行 Block Compression(如 SNAPPY),常能获得更好的综合收益。
- 何时需要压缩/编码:当数据体量显著大于 BlockCache 容量或存储成本成为瓶颈时收益更明显;若数据规模较小且缓存命中率高,可优先调优索引/缓存与查询模式。