CentOS环境下HBase性能调优的核心方法
hbase.regionserver.heapsize参数设置。例如,96G物理机可分配64G给RegionServer,再按5:4:1比例分配读缓存、写缓存和其他内存。ulimit -n 65535(永久生效需修改/etc/security/limits.conf)。net.core.rmem_max=16777216、net.core.wmem_max=16777216)提升网络吞吐;启用TCP快速打开(echo 3 > /proc/sys/net/ipv4/tcp_fastopen)减少连接建立时间。vm.swappiness=0)避免内存交换导致的性能下降;开启文件系统预读(blockdev --setra 32768 /dev/sda)提升读取效率。hfile.block.cache.size设置。需平衡读缓存(LRUBlockCache)与堆外缓存(BucketCache)的比例(如读缓存占50%、写缓存占40%)。hbase.regionserver.global.memstore.size设置。需遵循LRUBlockCache + MemStore < 80% * JVM_HEAP原则(如JVM堆设为40G时,两者之和不超过32G)。-XX:+UseG1GC)减少GC停顿;调整GC参数(如-XX:MaxGCPauseMillis=200)控制最大停顿时间。hbase.hregion.max.filesize(如10G-20G),避免单个Region过大导致查询变慢。TieredCompactionPolicy适合读多写少场景),减少小文件数量。可通过hbase.hstore.compaction.min(最小合并文件数)、hbase.hstore.compaction.max(最大合并文件数)调整合并范围。ASYNC_WAL提升写入性能,但牺牲部分数据安全性);使用高效WAL编码器(如IndexedWALEditCodec)减少WAL大小。hbase.client.batch.size)和批量获取(hbase.client.scanner.caching,如从100调至500-1000),减少RPC调用次数。hbase.hcolumn.max.versions,如1-3)减少历史数据存储;使用TTL(hbase.hcolumn.ttl)自动清理过期数据,节省存储空间。preSplit方法预先创建Region(如按时间或地域划分),避免后期数据倾斜导致的RegionServer过载。Scan.setCaching()值(如500-1000),减少客户端与RegionServer间的RPC交互。Get接口的批量操作(table.get(List<Get>)),减少多次RPC调用。scan.addFamily())或列(scan.addColumn()),避免加载多余数据。scan.setCacheBlocks(false)),防止缓存干扰实时业务数据。hbase.hregion.bloom.block.size),减少不必要的磁盘I/O(尤其适合点查场景)。hbase-regionserver.log),查找慢查询、GC停顿等问题。