1. 选择高性能硬件
2. 系统内核参数调优
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
并在/etc/rc.local
中添加上述命令,确保重启后生效。/etc/security/limits.conf
:* soft nofile 65536
* hard nofile 65536
0
(仅适用于内存充足场景):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. 批量操作
Put
列表批量提交(减少RPC次数),示例代码: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. 数据压缩
alter
命令设置:alter 'my_table', {NAME => 'cf', COMPRESSION => 'SNAPPY'}
2. 数据编码
FAST_DIFF
(减少存储空间,提高读取效率),设置示例:alter 'my_table', {NAME => 'cf', DATA_BLOCK_ENCODING => 'FAST_DIFF'}
1. 调整堆内存
2. 选择GC策略
hbase-env.sh
):export HBASE_OPTS="$HBASE_OPTS -XX:+UseG1GC"
-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间,单位毫秒)。major_compact
合并小文件(减少StoreFile数量),清理无用数据(如HDFS回收站中的旧文件)。以上策略需根据实际业务场景(如写入量大、读取延迟要求高、分析型查询等)调整,建议在测试环境验证效果后再应用于生产环境。