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