Ubuntu下HBase性能优化要点
一 系统层与JVM基础
hbase soft nofile 65536、hbase hard nofile 65536,并确认 ulimit -n 生效;按需优化 TCP 队列、somaxconn、swappiness 等,减少连接拥塞与抖动。-XX:+UseG1GC -XX:MaxGCPauseMillis=100;同时开启 GC 日志便于诊断。export HBASE_HEAPSIZE=32768(单位 MB)export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:MaxDirectMemorySize=32768m -Xloggc:$HBASE_LOG_DIR/gc-rs.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC"(CMS 方案示例)二 HBase核心参数与内存规划
hfile.block.cache.size=0.30,hbase.regionserver.global.memstore.upperLimit=0.45,lowerLimit=0.40(合计 75%)。hfile.block.cache.size=0.05–0.10(LRU 仅放索引/布隆等元数据),hbase.bucketcache.ioengine=offheap,hbase.bucketcache.size=0.60–0.70(堆外),hbase.bucketcache.percentage.in.combinedcache≈0.90;此时堆内 LRU + MemStore 仍应 ≤ 80% × JVM_HEAP。hbase.regionserver.handler.count(并发请求处理线程,默认 10,按并发与对象大小调优)zookeeper.session.timeout(建议 60000–120000 ms,兼顾故障切换速度与网络抖动容忍)hbase.hregion.max.filesize(Region 切分阈值,默认 256MB,结合写入速率与 compaction 冲击权衡)hbase.hstore.blockingStoreFiles(阻塞写阈值,避免过多 StoreFile 拖慢读写)hbase.hregion.memstore.mslab.enabled=true(开启 MSLAB)hbase.hregion.compacting.memstore.type=BASIC/EAGER(HBase 2.x,提升内存内合并效率)三 表设计与存储策略
VERSIONS(默认 3)、TTL 结合合规与查询需求,减少无效版本占用。create 't', 'cf', {SPLITS => ['008000', '010000', '018000', '020000']}alter 't', CONFIGURATION => {NAME => 'cf', BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'true', VERSIONS => '3', TTL => '2592000'}四 Compaction 与运维策略
max.filesize、压缩与缓存策略,减少 StoreFile 数量与查询放大。echo 'compact "t"' | hbase shellecho "Maintenance $(date)" >> /var/log/hbase_maintenance.log五 快速检查清单与常见陷阱
ulimit -n ≥ 65536、网络与磁盘健康、时钟同步(NTP)、JDK 版本匹配(建议 JDK 8/11)。handler.count 与对象大小匹配、BlockCache/ MemStore 命中率与 eviction 正常。file://(仅适合单机测试),生产应使用 HDFS:hdfs://<namenode>:9000/hbase。