1. 硬件资源优化
hbase.regionserver.global.memstore.size=0.4(MemStore上限)、hbase.regionserver.blockcache.size=0.4(BlockCache上限)。vm.swappiness=0),避免内存溢出时频繁换页影响性能。2. 操作系统调优
ulimit -n 65535),避免HBase因文件句柄不足导致RegionServer崩溃。net.core.rmem_max=16777216、net.core.wmem_max=16777216),提升网络吞吐量;启用TCP快速打开(echo 3 > /proc/sys/net/ipv4/tcp_fastopen),减少连接建立延迟。deadline或noop调度器(echo deadline > /sys/block/sda/queue/scheduler),减少IO等待时间(deadline适合高并发小IO,noop适合SSD)。3. HBase配置参数优化
hbase.hregion.max.filesize设置Region最大大小(建议10GB-20GB),避免单个Region过大导致查询变慢(如超过20GB会增加RegionServer的负载)。hbase.regionserver.global.memstore.upperLimit(MemStore内存上限,默认0.4)和hbase.regionserver.handler.count(处理RPC请求的线程数,默认30,可根据负载增至100),平衡写入性能与内存占用;使用高效WAL编码器(如IndexedWALEditCodec,hbase.regionserver.wal.codec),减少WAL文件大小。hfile.block.cache.size(BlockCache内存占比,默认0.4),提升读缓存命中率(适合读多写少场景);启用OffHeap缓存(hbase.offheapcache.percentage,如0.3),减少JVM GC对缓存的影响。TieredCompactionPolicy适合随机读,DateTieredCompactionPolicy适合时间序列数据),并调整hbase.hstore.compactionRatio(合并阈值,默认1.2),减少Compaction对IO的冲击。4. 数据模型设计优化
rowKey = MD5(key).substring(0,8) + key。Snappy,hbase.regionserver.compression.codec),减少存储空间与IO。SPLIT参数预先划分Region(如create 'table', 'cf', SPLITS => ['1000','2000','3000']),避免后期数据倾斜(如数据集中在少数Region),提升负载均衡效果。5. 客户端优化
BufferedMutator接口进行批量写入(而非单条Put),减少RPC调用次数(如批量大小设为1000条);使用get(List<Get>)接口进行批量读取,提升读取效率。Scan操作的缓存大小(如setCaching(500),默认100),减少客户端与RegionServer之间的RPC次数(适合大范围查询)。get('cf', 'rowKey'))或列(如get('cf', 'rowKey', 'qualifier')),避免检索不必要的数据,降低IO开销。6. 监控与维护
hbase-regionserver.log),查找慢查询(如SlowQueryFilter)、GC停顿(如Full GC时间过长)等问题。major_compact 'table')合并小文件,减少StoreFile数量(提升查询效率);清理过期数据(通过TTL设置,hbase.hcolumn.max.versions),释放存储空间。