下面从 操作系统、HDFS、HBase 配置、JVM、表设计、监控 几个层面,系统讲一下 CentOS 上 HBase 调优 的常用做法(适合生产环境参考)。
HBase 官方强烈建议关闭 THP,否则 GC 会异常。
# 查看
cat /sys/kernel/mm/transparent_hugepage/enabled
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭(CentOS 7)
vim /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
chmod +x /etc/rc.d/rc.local
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 vm.swappiness=0
永久:
vim /etc/sysctl.conf
vm.swappiness=0
mount -o noatime,nodiratime /dev/sdb /data
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>20</value>
</property>
HBase 一般使用:
dfs.blocksize = 128MB 或 256MB
<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.hregion.memstore.flush.size = 128M
hbase.hregion.memstore.block.multiplier = 4
hbase.hstore.compaction.min = 3
hbase.hstore.compaction.max = 10
hbase.hstore.compaction.max.size = 10G
避免大表频繁 major compaction。
hbase.wal.provider = multiwal
hbase.regionserver.wal.blocksize = 64M
示例(CMS):
-XX:+UseConcMarkSweepGC
-Xms32g -Xmx32g
-XX:CMSInitiatingOccupancyFraction=70
G1 示例:
-XX:+UseG1GC
-Xms32g -Xmx32g
-XX:MaxGCPauseMillis=200
-XX:MaxDirectMemorySize=8g
create 't1', 'cf', {SPLITS => ['10','20','30','40']}
md5(userid).substring(0,4) + userid
hbase hbck
hbase shell
status 'detailed'
| 项目 | 建议 |
|---|---|
| RegionServer 内存 | 32–64G |
| MemStore | 40% |
| BlockCache | 40% |
| GC | G1 / CMS |
| 磁盘 | JBOD |
| Region 数 | 20–200 / RS |
如果你愿意,可以告诉我:
我可以给你一套 针对性调优方案。