硬件资源优化
export HBASE_REGIONSERVER_OPTS="-Xms32g -Xmx32g"),并通过hbase.regionserver.global.memstore.size(默认0.4)控制MemStore大小,避免内存溢出。操作系统调优
ulimit -n 65535,避免因文件描述符不足导致连接拒绝。sysctl -w net.core.rmem_max=16777216和sysctl -w net.core.wmem_max=16777216增大TCP缓冲区,提升网络吞吐量;启用TCP快速打开(echo 3 > /proc/sys/net/ipv4/tcp_fastopen)减少握手延迟。vm.swappiness=0(sysctl -w vm.swappiness=0),避免内存交换导致性能下降。HBase配置参数优化
hbase.hregion.max.filesize(默认10GB)调整Region大小(建议5-20GB),避免单个Region过大导致查询变慢;合理设置hbase.hregion.memstore.flush.size(默认128MB),平衡写入性能与内存占用。hfile.block.cache.size(默认40%堆内存),提高读取缓存命中率;启用OffHeap缓存(hbase.offheapcache.percentage,建议10%-20%),减少GC负担。org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec)减少WAL写入开销;根据数据访问模式选择Compaction策略(如TieredCompactionPolicy适合读多写少,DateTieredCompactionPolicy适合时间序列数据),降低Compaction对性能的影响。数据模型设计优化
user_id:timestamp)。SPLIT参数预先分割Region(如create 'table_name', 'cf', SPLITS => ['1000', '2000', '3000']),避免后期数据倾斜导致的RegionServer过载。客户端优化
Scan.setCaching()(默认100,建议500-1000),减少RPC调用次数;使用批量Get(Table.get(List<Get>))或批量Put(BufferedMutator)接口,降低客户端与RegionServer之间的网络开销。scan.addFamily(Bytes.toBytes("cf")))或列(scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("column"))),避免全表扫描,提高查询效率。缓存与索引优化
hbase.mapreduce.hfileoutputformat.bloom.enabled=true),减少不必要的磁盘I/O(尤其适合点查场景)。CREATE INDEX idx_name ON table_name (column)),或在Coprocessor中实现自定义索引,减少查询延迟。监控与维护
hbase-regionserver.log),查找慢查询或异常(如GC停顿过长);定期执行Compaction(major_compact 'table_name')和Split(split 'region_name'),清理无用HFile文件,优化存储结构。