在 CentOS 上优化 HBase 性能,通常需要从操作系统、JVM、HDFS、HBase 配置、表设计、硬件等多个层面入手。下面给你一套比较系统、可落地的优化方案。
HBase 对延迟敏感,Swap 会导致严重性能问题。
# 临时
swapoff -a
# 永久(注释 /etc/fstab 中的 swap 行)
vim /etc/fstab
建议:
vm.swappiness = 0 或 1
sysctl -w vm.swappiness=1
使用 XFS / ext4,并优化挂载参数:
mount -o noatime,nodiratime,discard /dev/sdX /data
/etc/fstab 示例:
/dev/sdb /data xfs noatime,nodiratime 0 0
HBase 会打开大量文件:
ulimit -n 65536
ulimit -u 65536
永久配置:
vim /etc/security/limits.conf
hbase soft nofile 65536
hbase hard nofile 65536
hbase soft nproc 65536
hbase hard nproc 65536
sysctl -w net.core.somaxconn=1024
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
export HBASE_REGIONSERVER_OPTS="-Xms32g -Xmx32g -XX:+UseG1GC"
建议:
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35
HBase 通常配合:
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128MB -->
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
MemStore + BlockCache 通常 ≤ 0.8
<property>
<name>hbase.hstore.compaction.min</name>
<value>3</value>
</property>
<property>
<name>hbase.hstore.compaction.max</name>
<value>10</value>
</property>
示例:
hash(prefix) + userId + reverse(timestamp)
create 'test', 'cf', {SPLITS => ['10','20','30','40']}
status 'detailed'| 问题 | 原因 | 解决 |
|---|---|---|
| 写阻塞 | MemStore 满 | 增加 RS / 预分区 |
| 读慢 | BlockCache 小 | 增大 cache |
| GC 长 | 堆过大 | 降低 Xmx |
| Region 不均衡 | 热点 | 优化 RowKey |
如果你能告诉我:
我可以给你一套针对性配置模板。