/etc/sysctl.conf,调整以下关键参数以提升IO和网络性能,执行sysctl -p使配置生效:fs.file-max = 1000000 # 增加文件描述符限制(应对大量HFile)
vm.swappiness = 10 # 减少内存交换(避免频繁IO)
net.core.rmem_max = 16777216 # 增大TCP接收缓冲区
net.core.wmem_max = 16777216 # 增大TCP发送缓冲区
noatime(不更新访问时间)或relatime(减少时间戳更新),降低磁盘IO:mount -o remount,noatime /path/to/hbase/data
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
hbase-env.sh,设置RegionServer堆内存(根据服务器内存调整,如32GB):export HBASE_HEAPSIZE=32G
export HBASE_REGIONSERVER_OPTS="-Xms32g -Xmx32g"
hbase-site.xml中添加:<property>["是", "hbase.regionserver.global.memstore.size", "0.4"]</property> <!-- 占堆内存40% -->
<property>["是", "hbase.regionserver.memstore.flush.size", "268435456"]</property> <!-- 256MB触发刷盘 -->
<property>["是", "hbase.regionserver.blockcache.size", "0.4"]</property> <!-- 占堆内存40% -->
Splits参数预先划分Region(如按时间范围或哈希值),避免数据集中写入单个Region导致的热点问题:hbase shell> create 'my_table', {NAME => 'cf', VERSIONS => 1}, SPLITS => ['1000', '2000', '3000']
Long.MAX_VALUE - timestamp)或哈希前缀(如MD5(user_id)[0:4] + user_id),使数据均匀分布在Region上。setWriteToWAL(false)),提升写入速度,但需承担数据丢失风险(仅适用于离线场景);hbase.regionserver.optionallogflushinterval为更大值(如1000ms)。<property>["是", "hbase.hfile.compression", "SNAPPY"]</property>
put(List<Put>)、get(List<Get>)等批量接口,减少客户端与RegionServer之间的RPC调用次数(提升写入/读取效率)。setCaching(500)),减少多次IO;指定列族或列(如addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"))),避免全表扫描。hbase.jmx.enabled=true)获取详细性能指标。hbase hbck检查表一致性;每月清理无用HFile(hbase clean);根据数据增长情况调整Region大小(hbase.hregion.max.filesize,如从10GB调整为20GB)。以上策略需根据实际业务场景(如读多写少、写多读少)、数据规模(如TB级/PB级)和集群配置(如节点数量)进行调整。优化前务必在测试环境验证效果,避免直接应用于生产环境。