温馨提示×

HBase压缩设置在CentOS上如何操作

小樊
46
2025-12-15 20:07:06
栏目: 智能运维

在 CentOS 上配置 HBase 压缩的完整步骤

一 准备与算法选择

  • 压缩作用于 HBase 的列族(ColumnFamily),可与**数据块编码(Data Block Encoding)**同时使用或单独使用。HFile 默认支持的压缩算法为:NONE、GZ、SNAPPY、ZSTD;数据块编码支持:NONE、PREFIX、DIFF、FAST_DIFF、ROW_INDEX_V1。一般组合是“编码+压缩”,如:FAST_DIFF + SNAPPY,兼顾压缩率与读写性能。
  • 常见算法取舍:SNAPPY/ZSTD压缩/解压速度快、CPU 占用相对低;GZIP压缩率更高但 CPU 更高;LZO需额外许可与配置;LZ4速度快、压缩率一般。根据业务对吞吐/延迟/存储的权衡选择。

二 安装系统级压缩库

  • 选择 Snappy 时,在 CentOS 安装库与头文件(确保 RegionServer 节点均安装):
    • 安装命令:sudo yum install -y snappy snappy-devel
  • 选择 ZSTD 时,安装 zstd 开发包(若仓库提供;不同发行版包名可能为 zstd 或 libzstd-devel)。
  • 如使用 LZO,需额外安装并配置 LZO 编解码器及许可。
  • 安装完成后,后续步骤才能正常加载对应压缩库。

三 配置 HBase(可选,针对全局默认)

  • 编辑配置文件:$HBASE_HOME/conf/hbase-site.xml,在 内按需添加(示例为 Snappy):
    • 全局默认压缩算法(列族未显式指定时生效):
      <property>
        <name>hbase.regionserver.compression.type</name>
        <value>snappy</value>
      </property>
      
    • 确保 JVM 能加载本地库(如 Snappy 在 /usr/lib64/):
      <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
      </property>
      
      并在 $HBASE_HOME/conf/hbase-env.sh 中确保本地库路径可被 JVM 找到,例如:
      export HBASE_OPTS="$HBASE_OPTS -Djava.library.path=/usr/lib64"
      
  • 说明:HBase 官方更推荐在列族级显式设置压缩与编码;全局项仅作为缺省值,便于统一策略。

四 在列族上启用压缩与编码

  • 创建表时指定(HBase Shell):
    hbase shell
    create 't1', {NAME => 'f1', COMPRESSION => 'SNAPPY', DATA_BLOCK_ENCODING => 'FAST_DIFF'}
    
  • 修改已有表(HBase Shell):
    alter 't1', {NAME => 'f1', COMPRESSION => 'SNAPPY', DATA_BLOCK_ENCODING => 'FAST_DIFF'}
    
  • 提示:对已有数据,压缩/编码变更会在下一次 Compaction后对新生成的 HFile 生效,旧 HFile 逐步被替换。

五 重启与验证

  • 重启 HBase 使全局配置生效(如使用 systemd 管理的集群):
    sudo systemctl restart hbase-master
    sudo systemctl restart hbase-regionserver
    
    或使用脚本:
    $HBASE_HOME/bin/stop-hbase.sh
    $HBASE_HOME/bin/start-hbase.sh
    
  • 验证:
    • 在 HBase Shell 查看表/列族属性:
      describe 't1'
      
      输出中应看到列族 f1 的 COMPRESSION => ‘SNAPPY’DATA_BLOCK_ENCODING => ‘FAST_DIFF’
    • 观察 RegionServer 日志,确认启动时加载了对应压缩库(如 Snappy 无报错)。
    • 通过 HBase Web UI 或客户端工具查看表结构与存储占用变化。

六 常见问题与建议

  • 客户端报 “ClassNotFoundException/UnsatisfiedLinkError”:多为本地库未安装或 java.library.path 未包含库目录;在 RegionServer 节点安装对应库并修正 hbase-env.sh。
  • 修改未立即生效:压缩/编码对存量 HFile 需等待 Compaction;可手动触发 major compaction 加速生效。
  • 性能与存储权衡:写多读多场景优先 SNAPPY/ZSTD;存储紧张可评估 GZIP;编码建议与压缩搭配使用(如 FAST_DIFF + SNAPPY)。

0