一、硬件配置优化
hbase.regionserver.global.memstore.size
(控制MemStore总大小,默认0.4,即RegionServer堆内存的40%)和hfile.block.cache.size
(控制BlockCache大小,建议设为堆内存的40%,读多写少场景可提高至50%)参数,平衡内存使用与性能。二、操作系统调优
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连接建立时间。三、JVM调优
-XX:+UseG1GC
参数启用G1GC,并调整-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间),减少GC对性能的影响。四、HBase服务器端配置优化
hbase.hregion.max.filesize
参数设置Region的最大大小(建议10GB-20GB),避免单个Region过大导致查询变慢。hbase.hregion.memstore.flush.size
(如设为256MB,HDFS块大小的整数倍),减少MemStore频繁刷新;根据业务需求调整WAL持久化等级(如hbase.regionserver.hlog.blocksize
),平衡数据一致性与写入性能。TieredCompactionPolicy
),并通过hbase.hstore.compaction.min
(触发Compaction的最小HFile数,默认3)、hbase.hstore.compaction.max
(最大并发Compaction数,默认10)等参数控制Compaction频率,减少小文件数量。hfile.block.cache.size
(如设为堆内存的40%),提升读缓存命中率;对于读多写少场景,可启用offheap BlockCache(HBase 2.0+)进一步提升性能。hbase.scan.cacheblock
(Scan缓存大小,默认100,建议设为500-1000),减少RPC交互次数;对离线批量读取禁用缓存(setCacheBlocks(false)
),避免占用实时业务缓存。五、数据模型设计优化
cf1
、cf2
),减少I/O开销。hbase.hcolumn.max.versions
限制列的最大版本数(如设为1,仅保留最新数据);使用hbase.hcolumn.ttl
设置数据生命周期(如7天),自动清理过期数据,减少存储压力。六、客户端优化
put(List<Put>)
)和批量Get(get(List<Get>)
)接口,减少客户端与RegionServer之间的RPC调用次数,提高吞吐量。scan.addFamily(Bytes.toBytes("cf1"))
)或列(如scan.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("col1"))
),避免检索不必要的数据。setCacheBlocks(false)
,避免缓存占用实时业务热点数据。七、集群扩展与监控
preSplit
参数预分区(如create 'table1', 'cf1', SPLITS => ['1000', '2000', '3000']
),避免后期数据倾斜导致的热点问题。SlowLog
),及时调整配置参数。