CentOS上HBase性能优化策略
vm.swappiness=0,避免内存不足时频繁换页导致性能骤降);使用64位操作系统(支持更大内存寻址);调整文件系统参数(如ext4的data=writeback模式、预读设置blockdev --setra 16384 /dev/sda,提升IO吞吐量)。hbase.regionserver.heapsize,建议占总内存的50%-70%,如32GB内存设为24GB);开启G1GC垃圾回收器(-XX:+UseG1GC,减少Full GC停顿时间,适合大内存场景);配置MemStore大小(hbase.regionserver.global.memstore.size,建议不超过堆内存的40%,如24GB堆设为9GB,避免内存溢出)。hbase.hregion.max.filesize,建议10GB-20GB,避免单个Region过大导致查询变慢);优化Compaction策略(hbase.hstore.compaction.strategy,读多写少场景选TieredCompactionPolicy,减少小文件数量;写多场景选DateTieredCompactionPolicy,平衡写入与读取性能)。hfile.block.cache.size,建议占堆内存的30%-40%,如24GB堆设为8GB,提升热点数据读取性能);启用BucketCache(off-heap缓存,hbase.bucketcache.ioengine=offheap,减少JVM堆内存压力,适合大内存集群)。hash(userId))、反转时间戳(Long.MAX_VALUE - timestamp)或组合键(userId_deviceId),使数据均匀分布在不同Region);结合查询模式设计(如频繁按时间查询,将时间放在RowKey前缀,但需配合散列避免热点)。hbase.hcolumn.max.versions,根据业务需求设置版本数(如实时数据设为1,历史数据设为7);TTL(Time To Live),自动清理过期数据,减少存储压力)。BufferedMutator接口)替代单条Put,减少RPC调用次数(如每1000条数据批量提交);使用批量Get(Table.get(List<Get>))替代单条Get,提升读取效率。Scan.setCaching(500),默认100,提高每次RPC返回的数据量,减少RPC次数);指定列族或列(Scan.addFamily()/Scan.addColumn(),避免读取不必要的数据,降低IO开销);离线批量读取禁用缓存(Scan.setCacheBlocks(false),避免缓存实时业务热点数据,影响实时查询性能)。HBaseAdmin.createTable(HTableDescriptor, byte[][]),根据RowKey范围划分Region,避免后续数据集中写入单个Region);定期执行负载均衡(hbase shell balancer命令,或通过hbase.master.loadbalancer.class配置负载均衡器(如StochasticLoadBalancer),确保数据均匀分布在各个RegionServer)。