1. RegionServer 宕机
- 现象:RegionServer 进程异常退出,日志提示
ABORTING region server
或long garbage collecting pause
。 - 原因:
- 内存不足:堆内存耗尽或 Full GC 时间过长。
- 磁盘 I/O 瓶颈:大量写入或数据块扫描导致磁盘负载过高。
- 解决:
- 调整
hbase-env.sh
中堆内存参数(如HBASE_HEAPSIZE
)并优化 GC 策略(如启用 G1GC)。 - 使用 SSD 或优化数据分布策略(如合并小文件)。
- 调整
2. Region 分配异常
- 现象:
hbase hbck
检测到Region not deployed
或Region should not be deployed
。 - 原因:Region 元数据与实际部署状态不一致,或 RegionServer 故障导致未正确迁移 Region。
- 解决:
- 执行
hbase hbck -fixMeta
修复元数据,再执行hbase hbck -fixAssignments
重新分配 Region。 - 若修复无效,需禁用表后删除 Zookeeper 中
/hbase
节点并清理 HDFS 表目录。
- 执行
3. 数据空洞(Hole in Region Chain)
- 现象:
hbase hbck
报错ERROR: There is a hole in the region chain
,写入或读取失败。 - 原因:Region 元数据文件(
.regioninfo
)丢失或损坏,导致 Region 链不连续。 - 解决:
- 在 HDFS 中手动创建缺失的
.regioninfo
文件,并通过hbase hbck -fixHdfsHoles
修复。 - 若修复失败,需备份数据后重建表。
- 在 HDFS 中手动创建缺失的
4. HBase 启动失败
- 现象:HMaster 或 RegionServer 无法启动,报错
内存不足
或端口被占用
。 - 原因:
- 内存不足:JVM 堆内存配置过低或物理内存不足。
- 依赖服务异常:ZooKeeper 或 HDFS 未启动。
- 解决:
- 调整
hbase-site.xml
中的hbase.regionserver.global.memstore.size
等内存参数。 - 检查并启动 ZooKeeper 和 HDFS,使用
netstat
确认端口未被占用。
- 调整
5. 数据一致性与完整性异常
- 现象:
hbase hbck
显示Found inconsistency in table
,部分数据无法访问。 - 原因:元数据与 HDFS 实际数据不一致(如 ACL 表目录丢失或 WAL 日志损坏)。
- 解决:
- 停止 HBase 服务,删除 Zookeeper 中损坏的 ACL 表信息并重启服务。
- 使用
hbase hbck -fix
系列命令修复元数据和数据块。
6. 性能瓶颈与资源争用
- 现象:客户端读写延迟高,RegionServer CPU 或磁盘 I/O 负载过高。
- 原因:
- 小文件过多:频繁写入小文件导致元数据膨胀和扫描压力。
- Region 热点:RowKey 设计不合理导致请求集中。
- 解决:
- 优化 RowKey 设计(如哈希散列或时间戳反转)。
- 启用 HBase 归档工具(HAR)合并小文件,或调整
hbase.hregion.max.filesize
控制 Region 大小。
关键操作命令
# 检查并修复元数据
hbase hbck -fixMeta -fixAssignments
# 强制清理 Zookeeper 中 HBase 状态
zkCli.sh rmr /hbase
# 合并小文件(HAR 归档)
hadoop archive -archiveName myhar.har -p /hbase/data/table /archive
注:定期监控集群状态(如 HBase WebUI 和日志),结合 hbase hbck
和 hbase fsck
工具可快速定位问题。