一、硬件与环境基础优化
echo never > /sys/kernel/mm/transparent_hugepage/enabled和echo never > /sys/kernel/mm/transparent_hugepage/defrag,避免内存碎片化增加GC开销;/etc/sysctl.conf,设置fs.file-max=1000000(增加文件描述符限制)、vm.swappiness=0(内存充足时禁用交换分区,减少IO)、net.core.rmem_max=16777216/net.core.wmem_max=16777216(增大TCP缓冲区);noatime或relatime(减少磁盘时间戳更新开销);二、HBase配置参数优化
hbase-env.sh,设置RegionServer堆内存(如export HBASE_REGIONSERVER_HEAPSIZE=8G);hbase-site.xml中的缓存比例:hfile.block.cache.size(读缓存,读多写少场景建议0.5-0.7)、hbase.regionserver.global.memstore.size(写缓存,建议≤0.25,避免频繁刷盘);hbase.hregion.memstore.mslab.enabled=true),减少内存碎片化,降低Full GC频率。hbase.hregion.max.filesize设置Region大小(推荐5-20GB,平衡负载均衡与管理开销);hbase.regionserver.handler.count,建议80-128,应对高并发请求);hbase.client.write.buffer,建议2-4MB,减少RPC调用次数)。hbase.regionserver.compression.codec,推荐Snappy,兼顾压缩率与速度);hbase.regionserver.wal.async.sync=true)、启用WAL压缩(hbase.regionserver.wal.enablecompression=true,推荐Snappy),减少写入延迟与IO。三、数据模型设计优化
Long.MAX_VALUE - timestamp)或加盐(如salt + user_id)打散RowKey;RowKey长度尽量短(≤100字节),减少存储与比较开销。cf_hot),冷数据放在另一列族(如cf_cold),便于针对性优化。SPLITS参数预先划分Region(如create 'my_table', 'cf', SPLITS => ['1000', '2000', '3000']),避免数据集中写入单个Region导致的热点问题。四、读写操作优化
Table.put(List<Put>)(合并多个Put请求,减少RPC调用)、Table.get(List<Get>)(批量读取,提升效率);设置Scan.setCaching(500-1000)(增加每次RPC返回的行数,减少RPC次数)。Scan.setCacheBlocks(false)),避免大量数据进入BlockCache影响实时业务;指定列族或列(如Scan.addFamily(Bytes.toBytes("cf"))、Scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"))),减少不必要的I/O。Put.setWriteToWAL(false)),提升写入速度(需承担数据丢失风险,仅适用于离线场景)。五、负载均衡与容错
hbase balancer命令手动触发,将Region均匀分布在集群RegionServer上,避免单节点过载。hbase.hregion.replication(默认3,可调整为2,减少存储与同步开销);监控RegionServer状态,及时处理宕机节点(通过hbase hbck命令修复元数据不一致)。六、监控与持续调优
http://master:16010)、RegionServer UI监控集群状态(如Region数量、读写延迟、缓存命中率);开启JMX(hbase.jmx.enabled=true)获取详细性能指标。hbase_regionserver_*、hadoop_hdfs_*等指标,可视化分析性能瓶颈;设置告警阈值(如延迟>1s),及时预警。hbase hbck检查表一致性;每月清理HDFS回收站(hdfs dfs -expunge)、重建HFile索引(hbase hbck -j),保持集群健康状态。