确保已在CentOS系统上安装HBase(可通过hbase version命令验证)。若未安装,参考HBase官方文档完成安装。
HBase依赖系统级的压缩库(如Snappy、GZIP等),需先安装对应库文件:
# 安装Snappy库(常用,低CPU消耗,适合实时场景)
sudo yum install -y snappy snappy-devel
# 若需使用GZIP(高压缩比,高CPU消耗,适合归档数据)
sudo yum install -y gzip gzip-devel
# 若需使用LZO(需额外安装native库)
sudo yum install -y lzo lzo-devel
安装完成后,可通过ldconfig -p | grep <算法名>(如ldconfig -p | grep snappy)验证库是否加载成功。
编辑HBase主配置文件hbase-site.xml(通常位于/etc/hbase/conf/目录),添加或修改以下核心参数:
通过hbase.columnfamily.compression属性为指定列族设置压缩算法(如your_column_family):
<property>
<name>hbase.columnfamily.compression</name>
<value>snappy</value> <!-- 可选值:snappy(默认)、gzip、lzo、zstd、bzip2 -->
</property>
若需统一所有列族的压缩算法,可设置全局参数:
<property>
<name>hbase.regionserver.compression.type</name>
<value>snappy</value> <!-- 同上 -->
</property>
<property>
<name>hbase.regionserver.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value> <!-- 指定压缩编解码器 -->
</property>
<property>
<name>hbase.regionserver.compression.threshold</name>
<value>10485760</value> <!-- 10MB -->
</property>
<property>
<name>hbase.regionserver.compression.blocksize</name>
<value>65536</value> <!-- 64KB -->
</property>
<property>
<name>zstd.compression.level</name>
<value>3</value> <!-- 平衡压缩比与性能 -->
</property>
<property>
<name>zstd.train.dictionary</name>
<value>true</value> <!-- 启用字典训练 -->
</property>
<property>
<name>zstd.dictionary.size</name>
<value>131072</value> <!-- 字典大小(默认128KB) -->
</property>
以上参数可根据业务场景(如实时读写、归档存储)调整,例如实时场景推荐lz4(低CPU开销),归档场景推荐zstd(高压缩比)。
修改配置文件后,需重启HBase服务使配置生效:
sudo systemctl restart hbase-regionserver
sudo systemctl restart hbase-master
可通过systemctl status hbase-regionserver和systemctl status hbase-master验证服务状态。
启动HBase shell,执行以下命令查看表的压缩设置:
# 查看所有表的压缩配置
hbase shell> list_compression
# 查看指定表的详细信息(包含压缩算法)
hbase shell> describe 'your_table_name'
输出中若包含COMPRESSION => 'snappy',则表示配置生效。
编写Java程序(需引入HBase客户端依赖),通过Admin接口获取表的压缩配置:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
public class HBaseCompressionCheck {
public static void main(String[] args) throws Exception {
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "your_zookeeper_quorum"); // 替换为ZooKeeper地址
config.set("hbase.zookeeper.property.clientPort", "2181");
try (Connection connection = ConnectionFactory.createConnection(config);
Admin admin = connection.getAdmin()) {
TableName tableName = TableName.valueOf("your_table_name"); // 替换为目标表名
String compression = admin.getTableDescriptor(tableName)
.getValue("COMPRESSION");
System.out.println("Table compression algorithm: " + compression);
}
}
}
编译运行后,若输出Table compression algorithm: snappy,则说明配置成功。
启用压缩后,需持续监控系统性能,避免因压缩导致CPU或内存瓶颈:
status 'detailed',查看RegionServer的压缩次数、压缩比等指标。top、htop等工具监控CPU、内存使用情况,若CPU使用率过高,可降低压缩级别(如ZSTD从3调至1)或更换为低CPU消耗的算法(如LZ4)。io.file.buffer.size(默认32KB),提升压缩/解压缩效率。通过以上步骤,可在CentOS上为HBase配置数据压缩,优化存储空间占用和I/O性能。需根据实际业务场景选择合适的压缩算法和参数,定期监控并调整以达到最佳效果。