硬件配置优化
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)等工具模拟真实业务负载,评估优化效果,并根据测试结果进一步调整参数。