在配置HBase压缩前,需确保系统已安装Java环境(HBase运行基础)和对应压缩库(如Snappy、LZO等)。以CentOS为例,操作如下:
sudo yum install -y java-1.8.0-openjdk-devel
java -version # 验证安装,需显示Java版本信息
sudo yum install -y epel-release # 启用EPEL仓库(含snappy-devel)
sudo yum install -y snappy-devel
若选择LZO,需额外安装lzo-devel;选择Zstandard(Zstd),安装zstd-devel。HBase的压缩配置主要在hbase-site.xml文件中完成(路径通常为/etc/hbase/conf/hbase-site.xml)。需添加或修改以下关键配置:
hbase.regionserver.compression.type指定全局压缩算法(可选值:SNAPPY、GZIP、LZO、ZSTD、NONE),例如启用Snappy:<property>
<name>hbase.regionserver.compression.type</name>
<value>SNAPPY</value>
</property>
<property>
<name>hbase.regionserver.compression.codec</name>
<value>org.apache.hadoop.hbase.io.compress.SnappyCodec</value>
</property>
<property>
<name>hbase.regionserver.compression.threshold</name>
<value>10485760</value> <!-- 10MB:数据超过10MB时触发压缩 -->
</property>
<property>
<name>hbase.regionserver.compression.blocksize</name>
<value>65536</value> <!-- 64KB:压缩块大小(影响压缩率与性能) -->
</property>
注:不同压缩算法的性能差异较大,热数据(频繁访问)推荐Snappy/LZ4(低CPU开销、高解压速度),冷数据(很少访问)推荐ZSTD/GZIP(高压缩率)。
修改配置文件后,需重启HBase集群(包括Master和RegionServer):
# 停止HBase(若已启动)
$HBASE_HOME/bin/stop-hbase.sh
# 启动HBase
$HBASE_HOME/bin/start-hbase.sh
# 验证进程是否启动(应看到HMaster、HRegionServer进程)
jps
通过以下两种方式验证压缩是否配置成功:
hbase shell
# 查看表的压缩配置(替换your_table_name为实际表名)
describe 'your_table_name'
# 输出中应包含"COMPRESSION => 'SNAPPY'"(或你设置的算法)
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;
import org.apache.hadoop.hbase.TableDescriptor;
public class HBaseCompressionCheck {
public static void main(String[] args) throws Exception {
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "your_zookeeper_quorum"); // 替换为ZK地址
config.set("hbase.zookeeper.property.clientPort", "2181");
try (Connection connection = ConnectionFactory.createConnection(config);
Admin admin = connection.getAdmin()) {
TableDescriptor tableDescriptor = admin.getDescriptor(TableName.valueOf("your_table_name"));
String compressionType = tableDescriptor.getCompactionConfiguration().getCompression().toString();
System.out.println("Compression Type: " + compressionType); // 应输出设置的算法
}
}
}
编译并运行程序,确认输出的压缩类型与配置一致。java.library.path包含Snappy库路径(如/usr/lib64),可在hbase-env.sh中添加:export HBASE_OPTS="$HBASE_OPTS -Djava.library.path=/usr/lib64"