HBase监控与诊断 #

一、监控概述 #

1.1 监控维度 #

text
HBase监控维度
├── 集群级别
│   ├── Master状态
│   ├── RegionServer数量
│   └── Region分布
│
├── RegionServer级别
│   ├── 请求QPS
│   ├── 内存使用
│   └── Region数量
│
├── Region级别
│   ├── Region大小
│   ├── 请求热点
│   └── Compaction状态
│
└── 表级别
    ├── 表大小
    ├── 请求量
    └── Region数量

二、Web UI监控 #

2.1 Master UI #

text
Master UI地址
└── http://master:16010

Master UI功能
├── 集群概览
│   ├── RegionServer数量
│   ├── Region数量
│   └── 集群负载
│
├── 表管理
│   ├── 表列表
│   ├── 表详情
│   └── Region分布
│
├── RegionServer列表
│   ├── 服务器状态
│   ├── 请求数
│   └── Region数量
│
└── 用户任务
    ├── 任务状态
    └── 任务进度

2.2 RegionServer UI #

text
RegionServer UI地址
└── http://regionserver:16030

RegionServer UI功能
├── 服务器概览
│   ├── 请求QPS
│   ├── 内存使用
│   └── Region数量
│
├── BlockCache
│   ├── 缓存大小
│   ├── 命中率
│   └── 驱逐次数
│
├── MemStore
│   ├── 内存使用
│   └── Flush统计
│
├── Compaction
│   ├── 队列长度
│   └── 执行统计
│
└── Region列表
    ├── Region名称
    ├── Region大小
    └── 请求数

2.3 关键指标解读 #

text
Master UI关键指标
├── Live Region Servers
│   └── 存活的RegionServer数量
│
├── Dead Region Servers
│   └── 死亡的RegionServer数量
│
├── Regions in Transition
│   └── 状态转换中的Region
│
└── Average Load
    └── 平均Region数量

RegionServer UI关键指标
├── Requests Per Second
│   └── 每秒请求数
│
├── Block Cache Hit Ratio
│   └── 缓存命中率(建议>80%)
│
├── MemStore Size
│   └── MemStore内存使用
│
└── Compaction Queue Size
    └── Compaction队列长度

三、Shell监控命令 #

3.1 集群状态 #

ruby
# 查看集群状态
status

# 简洁格式
status 'simple'

# 详细格式
status 'detailed'

# Master状态
status 'master'

3.2 表状态 #

ruby
# 查看表是否存在
exists 'user'

# 查看表是否启用
is_enabled 'user'

# 查看表结构
describe 'user'

# 统计行数
count 'user'

# 查看Region分布
describe 'user'

3.3 Region管理 #

ruby
# 查看Region分布
status 'detailed'

# 查看特定RegionServer的Region
# 通过Master UI查看

# 移动Region
move 'region_encoded', 'server_name'

# 切分Region
split 'user', 'split_key'

# 合并Region
merge_region 'region1', 'region2'

四、日志分析 #

4.1 日志位置 #

text
日志文件位置
├── Master日志
│   └── /opt/hbase/logs/hbase-hbase-master-*.log
│
├── RegionServer日志
│   └── /opt/hbase/logs/hbase-hbase-regionserver-*.log
│
└── GC日志
    └── /opt/hbase/logs/gc.log

4.2 日志级别 #

ruby
# 查看日志级别
log_level

# 设置日志级别
log_level 'DEBUG', 'org.apache.hadoop.hbase.regionserver'

# 常用日志级别
# ERROR - 错误
# WARN  - 警告
# INFO  - 信息(默认)
# DEBUG - 调试

4.3 常见日志分析 #

bash
# 查看错误日志
grep -i "error\|exception" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 查看Region切分日志
grep "Split" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 查看Compaction日志
grep "Compaction" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 查看Flush日志
grep "Flush" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 查看GC日志
grep "GC" /opt/hbase/logs/gc.log

4.4 日志分析示例 #

text
Region切分日志示例
2024-01-01 10:00:00,000 INFO  [regionserver/xxx] regionserver.HRegion: 
Splitting region user,,1704067200000.abc123

Compaction日志示例
2024-01-01 10:00:00,000 INFO  [regionserver/xxx] regionserver.HStore: 
Completed compaction of 3 file(s) in info of user,,1704067200000.abc123

Flush日志示例
2024-01-01 10:00:00,000 INFO  [regionserver/xxx] regionserver.HRegion: 
Flushing user,,1704067200000.abc123 with memstore size 128 MB

五、JMX监控 #

5.1 启用JMX #

bash
# hbase-env.sh

export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"

5.2 关键JMX指标 #

text
RegionServer JMX指标
├── java.lang:type=Memory
│   ├── HeapMemoryUsage
│   └── NonHeapMemoryUsage
│
├── java.lang:type=GarbageCollector
│   ├── CollectionCount
│   └── CollectionTime
│
├── Hadoop:name=RegionServerStatistics
│   ├── requests
│   ├── readRequestCount
│   └── writeRequestCount
│
└── Hadoop:name=RegionServer,sub=Server
    ├── blockCacheHitCount
    ├── blockCacheMissCount
    └── blockCacheEvictionCount

5.3 JMX监控工具 #

text
JMX监控工具
├── JConsole
│   └── JDK自带
│
├── VisualVM
│   └── JDK自带
│
├── JMXTrans
│   └── 导出JMX指标
│
└── Prometheus + Grafana
    └── 可视化监控

六、故障诊断 #

6.1 RegionServer故障 #

bash
# 症状
# - RegionServer进程消失
# - Region重新分配

# 诊断步骤
# 1. 检查进程
jps | grep HRegionServer

# 2. 检查日志
tail -100 /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 3. 检查ZooKeeper
zkCli.sh
ls /hbase/rs

# 4. 检查系统资源
top
free -m
df -h

6.2 Region热点 #

bash
# 症状
# - 某个RegionServer负载高
# - 请求分布不均

# 诊断步骤
# 1. 查看Region分布
status 'detailed'

# 2. 查看Region请求量
# 通过RegionServer UI查看

# 3. 检查RowKey设计
# 是否存在热点RowKey

# 解决方案
# - 优化RowKey设计
# - 预分区
# - 移动热点Region

6.3 写入慢 #

bash
# 症状
# - 写入延迟高
# - 写入QPS低

# 诊断步骤
# 1. 检查MemStore使用率
# 通过RegionServer UI查看

# 2. 检查Flush频率
grep "Flush" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 3. 检查WAL写入
grep "WAL" /opt/hbase/logs/hbase-hbase-regionserver-*.log

# 4. 检查磁盘IO
iostat -x 1

# 解决方案
# - 增大MemStore
# - 优化RowKey避免热点
# - 检查磁盘性能

6.4 读取慢 #

bash
# 症状
# - 读取延迟高
# - BlockCache命中率低

# 诊断步骤
# 1. 检查BlockCache命中率
# 通过RegionServer UI查看

# 2. 检查Scan方式
# 是否全表扫描

# 3. 检查布隆过滤器
describe 'user'

# 4. 检查Compaction队列
# 通过RegionServer UI查看

# 解决方案
# - 增大BlockCache
# - 启用布隆过滤器
# - 优化Scan
# - 触发Compaction

6.5 GC问题 #

bash
# 症状
# - 频繁Full GC
# - GC时间长

# 诊断步骤
# 1. 查看GC日志
grep "Full GC" /opt/hbase/logs/gc.log

# 2. 分析GC频率
jstat -gcutil <pid> 1000

# 3. 检查内存使用
jmap -heap <pid>

# 解决方案
# - 调整堆大小
# - 调整年轻代大小
# - 使用G1垃圾回收器
# - 启用堆外内存

七、监控告警 #

7.1 告警指标 #

text
告警指标建议
├── RegionServer存活
│   └── 死亡立即告警
│
├── 内存使用率
│   └── >80% 告警
│
├── BlockCache命中率
│   └── <70% 告警
│
├── Compaction队列
│   └── >100 告警
│
├── Flush队列
│   └── >50 告警
│
└── GC时间
    └── >1秒告警

7.2 监控系统集成 #

text
监控系统集成
├── Prometheus + Grafana
│   ├── JMX Exporter
│   └── 可视化仪表盘
│
├── Ganglia
│   └── Hadoop原生支持
│
├── Ambari
│   └── 集群管理+监控
│
└── Cloudera Manager
    └── 企业级监控

八、诊断工具 #

8.1 HBase工具 #

bash
# HBase Canary
hbase canary

# 检查特定表
hbase canary -t user

# HBCK工具
hbase hbck

# 检查并修复
hbase hbck -fix

8.2 系统工具 #

bash
# CPU使用
top -H -p <pid>

# 内存使用
jmap -heap <pid>

# 线程栈
jstack <pid> > thread.txt

# 网络连接
netstat -anp | grep <pid>

# 磁盘IO
iostat -x 1

# 文件句柄
lsof -p <pid> | wc -l

九、最佳实践 #

9.1 监控建议 #

text
监控最佳实践
├── 建立完善的监控体系
├── 设置合理的告警阈值
├── 定期检查监控数据
├── 保留历史监控数据
└── 建立监控文档

9.2 故障处理流程 #

text
故障处理流程
├── 1. 发现问题
│   └── 监控告警/用户反馈
│
├── 2. 定位问题
│   └── 日志分析/指标分析
│
├── 3. 解决问题
│   └── 配置调整/代码修复
│
├── 4. 验证解决
│   └── 监控验证/功能验证
│
└── 5. 总结复盘
    └── 文档记录/经验总结

十、总结 #

本节介绍了HBase监控与诊断:

内容 要点
Web UI Master UI、RegionServer UI
Shell命令 status、describe、count
日志分析 错误日志、GC日志
JMX监控 关键指标、监控工具
故障诊断 RegionServer故障、性能问题

HBase文档系列到此结束!

最后更新:2026-03-27