1. 选择高性能硬件
优先使用SSD/NVMe替代传统HDD,显著提升随机读写性能(HBase对I/O敏感);根据集群规模分配充足内存(RegionServer堆内存建议≥8GB,具体取决于数据量);选择多核处理器(如Intel Xeon系列),提升并发处理能力;使用千兆及以上以太网卡,避免网络成为瓶颈。
2. 系统内核参数调优
/etc/rc.local确保重启生效:echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
/etc/security/limits.conf:* soft nofile 65536
* hard nofile 65536
echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
noatime或relatime减少磁盘I/O,编辑/etc/fstab对HBase数据目录挂载项添加noatime。1. RegionServer内存管理
hbase-env.sh:export HBASE_REGIONSERVER_HEAPSIZE=8G
hbase.regionserver.global.memstore.upperLimit:控制所有Region的MemStore总大小(默认0.4,建议0.45,避免频繁flush);hbase.regionserver.blockcache.size:设置BlockCache占比(读多写少场景建议0.6-0.8,写多读少建议0.3-0.5)。2. Region与HFile设置
hbase.hregion.max.filesize调整(默认10GB,建议5-20GB,平衡负载均衡与管理开销);hbase-site.xml:<property>
<name>hbase.hfile.block.size</name>
<value>65536</value> <!-- 64KB -->
</property>
3. WAL(Write-Ahead Log)调优
hbase.regionserver.wal.async.sync=true;hbase.regionserver.wal.enablecompression=true,推荐使用Snappy算法。4. 并发处理优化
增加处理线程数,通过hbase.regionserver.handler.count调整(默认30,建议80-128,应对高并发请求)。
1. RowKey设计
2. 列族设计
cf),避免特殊字符增加解析开销。3. 预分区
建表时预分区,通过NUMREGIONS和SPLITALGO参数预先分割Region,避免数据集中写入单个Region,示例:
create 'my_table', 'cf', {
NUMREGIONS => 10,
SPLITALGO => 'HexStringSplit'
}
1. 批量操作
List<Put> puts = new ArrayList<>();
for (Data data : dataList) {
Put put = new Put(Bytes.toBytes(data.getRowKey()));
put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("column"), Bytes.toBytes(data.getValue()));
puts.add(put);
}
table.put(puts);
Scan.setBatch()设置批量获取条数(如1000),减少客户端与RegionServer交互。2. Scan优化
Scan.setCaching()设置(默认100,建议500-1000),减少RPC次数;Scan.addFamily()或Scan.addColumn()限制扫描范围,避免全表扫描。3. 过滤器使用
添加过滤器(如PrefixFilter、RowFilter)减少扫描数据量,示例:
Filter filter = new PrefixFilter(Bytes.toBytes("prefix"));
Scan scan = new Scan();
scan.setFilter(filter);
1. 数据压缩
选择压缩算法(推荐Snappy,压缩/解压速度快,适合HBase),通过alter命令设置:
alter 'my_table', {NAME => 'cf', COMPRESSION => 'SNAPPY'}
2. 数据编码
使用高效编码(如FAST_DIFF,减少存储空间,提高读取效率),设置示例:
alter 'my_table', {NAME => 'cf', ENCODING => 'FAST_DIFF'}
hbase.hstore.compaction.min为0),避免合并操作占用资源;RatioBasedCompactionPolicy),减少不必要的合并;