一、硬件配置优化
hbase.regionserver.global.memstore.size参数控制MemStore大小(通常不超过堆内存的40%),避免频繁刷写磁盘。二、操作系统调优
ulimit -n 65535),避免因连接数过多导致拒绝服务。sysctl命令增大TCP缓冲区大小(如sysctl -w net.core.rmem_max=16777216、sysctl -w net.core.wmem_max=16777216),提升网络传输效率。echo 3 > /proc/sys/net/ipv4/tcp_fastopen,减少TCP连接建立时间,降低延迟。vm.swappiness设置为0(sysctl -w vm.swappiness=0),彻底禁用交换分区。三、HBase配置参数优化
-Xmx8G,设置为物理内存的50%-70%),并使用G1垃圾收集器(-XX:+UseG1GC)降低Full GC停顿时间(如-XX:MaxGCPauseMillis=200)。hbase.hregion.max.filesize参数调整Region大小(建议10GB-20GB),避免单个Region过大导致查询变慢。hbase.client.autoFlush=false),增大写缓冲区(hbase.client.write.buffer=128MB),批量提交数据以减少网络I/O;使用高效WAL编码器(如org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec),提升WAL写入性能。hfile.block.cache.size=0.4,占堆内存的40%),提升读缓存命中率;根据业务场景选择缓存策略(如读多写少用LRUBlockCache,写多读少用BucketCache)。TieredCompactionPolicy适合读多写少场景),减少小文件数量,提升读取性能。四、数据模型设计优化
hbase.hcolumn.max.versions),减少存储空间占用。pre-splitting预先划分Region(如根据RowKey范围划分),避免后期数据倾斜导致的Region热点问题,提升写入和查询的均匀性。五、客户端优化
List<Put>)和批量Get(List<Get>)接口,减少客户端与RegionServer之间的RPC连接数,提升吞吐量。scan.setCaching(500),从默认100调整为500),减少RPC次数,降低延迟。scan.addFamily(Bytes.toBytes("cf1")))或列(如scan.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("col1"))),避免全表扫描,提升查询效率。scan.setCacheBlocks(false),避免大量数据进入BlockCache,影响实时业务的缓存命中率。六、监控与调优
hbase-regionserver.log),查找异常(如Full GC频繁、Compaction耗时过长),针对性调整配置。HBase benchmark工具(如PerformanceEvaluation)定期测试集群性能,评估优化效果,并根据测试结果进一步调整参数。