温馨提示×

hbase在centos如何调优

小樊
44
2026-09-18 12:34:45
栏目: 智能运维

下面从 操作系统、HDFS、HBase 配置、JVM、表设计、监控 几个层面,系统讲一下 CentOS 上 HBase 调优 的常用做法(适合生产环境参考)。


一、CentOS / 操作系统层调优

1. 关闭透明大页(THP)

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

2. 文件描述符 & 进程数

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

3. 关闭 swap(非常重要)

sysctl vm.swappiness=0

永久:

vim /etc/sysctl.conf
vm.swappiness=0

4. 磁盘 & 文件系统

  • 使用 XFS / ext4
  • 挂载选项建议:
mount -o noatime,nodiratime /dev/sdb /data
  • 多块磁盘做 JBOD(不要 RAID5)

二、HDFS 层调优

1. hdfs-site.xml

<property>
  <name>dfs.datanode.max.transfer.threads</name>
  <value>8192</value>
</property>

<property>
  <name>dfs.datanode.handler.count</name>
  <value>20</value>
</property>

2. 块大小

HBase 一般使用:

dfs.blocksize = 128MB 或 256MB

三、HBase 核心配置调优(hbase-site.xml)

1. RegionServer 内存

<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


2. MemStore Flush

hbase.hregion.memstore.flush.size = 128M
hbase.hregion.memstore.block.multiplier = 4

3. Compaction 控制

hbase.hstore.compaction.min = 3
hbase.hstore.compaction.max = 10
hbase.hstore.compaction.max.size = 10G

避免大表频繁 major compaction。


4. WAL 调优

hbase.wal.provider = multiwal
hbase.regionserver.wal.blocksize = 64M

四、JVM 调优(非常关键)

1. GC 选择

  • JDK8:CMS
  • JDK11+:G1GC

示例(CMS):

-XX:+UseConcMarkSweepGC
-Xms32g -Xmx32g
-XX:CMSInitiatingOccupancyFraction=70

G1 示例:

-XX:+UseG1GC
-Xms32g -Xmx32g
-XX:MaxGCPauseMillis=200

2. 堆外内存

-XX:MaxDirectMemorySize=8g

五、表 & RowKey 设计(最容易忽视)

1. Region 预分区

create 't1', 'cf', {SPLITS => ['10','20','30','40']}

2. RowKey 设计原则

  • 避免 时间前缀
  • 使用 hash 前缀
md5(userid).substring(0,4) + userid

3. Column Family 控制

  • 1~2 个 CF
  • 不要超过 3 个

六、监控 & 问题定位

1. 必备监控

  • RegionServer GC
  • MemStore 使用率
  • StoreFile 数量
  • Compaction 队列

2. 常用命令

hbase hbck
hbase shell
status 'detailed'

七、典型生产配置参考(示例)

项目 建议
RegionServer 内存 32–64G
MemStore 40%
BlockCache 40%
GC G1 / CMS
磁盘 JBOD
Region 数 20–200 / RS

如果你愿意,可以告诉我:

  • HBase 版本
  • 数据量 & QPS
  • 读多还是写多
  • 机器配置

我可以给你一套 针对性调优方案

0