一、硬件与操作系统基础优化
vm.swappiness=0,防止内存数据交换到磁盘导致性能骤降);使用64位操作系统(支持更大内存寻址);调整文件系统缓存(如ext4的data=writeback模式)和预读设置(blockdev --setra 16384 /dev/sdX,提升顺序写入性能)。二、HBase配置参数优化
hbase.regionserver.heapsize,建议6-8GB以上),避免内存不足导致频繁GC;调整新生代比例(-XX:NewSize=1g -XX:MaxNewSize=1g,优化Young GC效率);增加RPC处理线程数(hbase.regionserver.handler.count,高并发场景从默认30调至100-200,提升请求处理能力)。hbase.client.autoFlush=false,避免每条Put都触发网络I/O);增大写缓冲区(hbase.client.write.buffer,默认2MB,可根据内存调至256MB-512MB,批量积累Put数据后提交);禁用WAL同步(hbase.wal.hsync=false,hbase.hfile.hsync=false,减少HDFS同步等待时间,提升写入吞吐量,但需权衡数据可靠性)。hbase.regionserver.compression.type=SNAPPY,Snappy兼顾压缩速度与比率,适合HBase场景),减少磁盘IO和网络传输开销,提升写入效率。hbase.hregion.majorcompaction=false,时序数据场景常用),避免定期全量合并StoreFile导致的性能抖动;调整Minor Compaction阈值(hbase.hstore.compactionThreshold,默认3,可适当增大,减少不必要的合并)。三、表设计与客户端优化
user_id_timestamp),避免热点问题(如单调递增RowKey会导致数据集中在单个Region);将高频访问的数据分散到不同Region(如逆序时间戳timestamp_user_id,让新数据均匀分布)。HTable.put(List<Put>)接口(而非单条Put),批量提交数据,减少RPC调用次数(建议每批100-1000条,根据数据大小调整),吞吐量可提升3-5倍。hbase.client.setAutoFlush(false)),配合批量大小(hbase.client.write.batch.size,默认100,可调至200-500),实现异步提交,进一步提升写入性能。四、集群与服务层优化
hbase.hregion.split.policy,可选择HexStringSplit或自定义策略),避免后续数据增长导致Region分裂的热点问题,提升写入均衡性。hbase.balancer.period,默认10分钟,可缩短至5分钟),定期调整Region分布,确保数据均匀分布在各个RegionServer上,避免单点过载。