在 Linux 环境下优化 HBase 性能,通常可以从 硬件/系统层、HDFS 层、HBase 配置、表设计、读写优化、监控与调优 几个维度来做。下面给你一个较系统的优化清单(偏生产实践)。
mount -o noatime,nodiratime,discard /dev/sdX /data
swapoff -a
或永久:
echo "vm.swappiness=0" >> /etc/sysctl.conf
sysctl -p
ulimit -n 65536
/etc/security/limits.conf:
hbase soft nofile 65536
hbase hard nofile 65536
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128MB -->
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
⚠️ 两者之和 < 0.8
hbase.regionserver.handler.count = 30~60
hbase.wal.provider = multiwal
hbase.hstore.compaction.min = 3
hbase.hstore.compaction.max = 10
避免大合并影响性能
✅ 原则:
Long.MAX_VALUE - timestamp示例:
hash(prefix) + timestamp
create 't', 'cf', {SPLITS => ['10','20','30']}
alter 't', {NAME=>'cf', TTL=>'7 DAYS', COMPRESSION=>'SNAPPY'}
table.put(List<Put>)
table.setAutoFlushTo(false)
scan.setCaching(1000)
hbase hbck-XX:+UseG1GC
-Xms32g -Xmx32g
-XX:MaxGCPauseMillis=200
如果你愿意,可以告诉我:
我可以直接给你一套 可落地的配置模板。