硬件配置优化
hbase.regionserver.global.memstore.size
参数控制MemStore大小(通常为堆内存的30%-40%),避免内存溢出。操作系统调优
ulimit -n 65535
),避免因连接数过多导致查询失败。sysctl -w net.core.rmem_max=16777216
和sysctl -w net.core.wmem_max=16777216
增大TCP读写缓冲区,提升网络传输效率。vm.swappiness=0
(在/etc/sysctl.conf
中),避免系统将内存数据交换到磁盘,影响HBase性能。JVM调优
-XX:+UseG1GC
),并通过-XX:MaxGCPauseMillis=200
设置最大GC停顿时间(如200ms),减少GC对查询的影响。HBase配置优化
hbase.hregion.max.filesize
调整Region上限(如10GB-20GB),避免单个Region过大导致查询变慢。hbase.regionserver.memstore.flush.size
(如128MB-256MB)控制MemStore刷新阈值;选择高效WAL编码器(如org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
),减少WAL写入开销。hfile.block.cache.size
参数)。TieredCompactionPolicy
),并避免在业务高峰期执行Major Compaction,减少系统资源消耗。数据模型设计
timestamp_reverse = Long.MAX_VALUE - timestamp
)技术,使RowKey均匀分布;设计时考虑查询模式(如前缀匹配),提高查询效率。SPLIT
参数预先划分Region(如按时间范围或哈希值划分),避免后期数据倾斜导致的RegionServer负载不均。客户端优化
Scan.setCaching()
值(如从默认100提升至500-1000),减少客户端与RegionServer间的RPC交互次数。BufferedMutator
接口执行批量Put/Delete操作,降低RPC调用频率;查询时使用批量Get(Table.get(List<Get>)
),提高读取效率。Scan.addFamily(Bytes.toBytes("cf1"))
)或列(如Scan.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("col1"))
),避免加载多余数据。Scan.setCacheBlocks(false)
,防止缓存干扰实时业务数据。查询优化技巧
SingleColumnValueFilter
用于条件筛选、PrefixFilter
用于前缀匹配),在服务器端过滤数据,减少返回结果集大小。Endpoint Coprocessor
)在RegionServer端执行自定义逻辑(如聚合计算),减少客户端与RegionServer间的网络传输开销。监控与迭代
hbase-regionserver.log
),查找慢查询、GC停顿等问题,针对性调整配置。YCSB
(Yahoo Cloud Serving Benchmark)等工具模拟真实业务负载,评估优化效果,并根据测试结果进一步调整参数。