HBase 常见故障与解决方案

news/2025/3/28 6:41:26/文章来源:https://www.cnblogs.com/yeyuzhuanjia/p/18784809

‌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 修复‌
    • 若修复失败,需备份数据后重建表‌


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 工具可快速定位问题‌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3月10号-3月16号笔记三合一+两篇面经

2025.3.10 学习 八股 blocked和waiting有啥区别 触发条件:线程进入BLOCKED状态通常是因为试图获取一个对象的锁(monitor lock),但该锁已经被另一个线程持有。这通常发生在尝试进入synchronized块或方法时,如果锁已被占用,则线程将被阻塞直到锁可用。线程进入WAITING状态是…

Dicom纯js的三维重建影像浏览器

主要功能介绍 实现通过浏览器浏览Dicom影像阅片。主要功能:支持标准DIcom影像的2D浏览,预设窗位,伪彩,序列间,序列内多种布局方式。 影像处理,提供影像翻图、缩放、移动、透镜、反相、旋转、截图等操作 影像测量,提供箭头、直线、十字架、角度、Cobb、心胸比、椭圆、矩形…

电子签借贷真实吗?315报道引发的行业地震!电子签到底冤不冤?

看了315的相关报道后,曝光套路贷本来是正向的,却将电子签和高利贷混为一谈。这种无意识的混淆不仅会误导大众,也不利于新兴技术的健康发展。电子签作为一种替代纸质合同签署的新兴技术,有着独特的优势和重要的意义。在过去,不同主体之间签订合同往往需要面对面进行签署,这…

C#反编译

偶遇C#逆向题,IDA拼尽全力无法战胜,只给我一团乱码。 这时可以使用dnSpy来反编译: https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 1.dnSpy使用方法: 将你要反编译的程序的整个文件夹拖到那里,似乎只有.dll那里才能看到源码, 例题:https://www.nssctf.cn/problem/3…

Windows11跳过Microsoft账户登录方法

新版Win11默认必须联网并且使用Microsoft账户登录,不然不能进去系统,以下是不联网进入方法1、在开机出现登录界面时,按下Ctrl+Shift+F3快捷键,然后系统会自动重启,重启 后会出现一个不需要登录Microsoft账户的启动界面,直接进入Windows11系统,系统中会弹窗,点确定。 2、…

android studio 真机wifi调试经验汇总

--------------- 2025/03/11 真机连接连不上wifi调试可能的原因: 1.手机没有开启开发者模式 2.手机没有开启usb调试以及wifi调试 3.手机应该改为传输文件模式 4.手机和电脑应该连接同一个wifi 5.在电脑cmd窗口输入adb connect ip:port(前提电脑需要配好adb环境)adb连接手机教…

广度优先搜索(BFS)走迷宫:

广度优先搜索(BFS)走迷宫: 广度优先搜索(BFS)是一种经典的图遍历算法,在解决路径查找、迷宫问题、拓扑排序等问题 前置知识:队列: 队列与栈类似,但是先进先出,而不是栈的先进后出。 原理: 相当于爆破,将所有的位置都走一遍 通用迷宫代码实现: #include <iostre…

TEA与XTEA算法:

TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1…

ui中的控件stackwidget如何拖拽添加widget

QStackedWidget界面的操作步骤-百度经验

UPX加壳原理,加壳及去壳:

加壳: 先写一个简单的代码:生成text.exe文件,然后把这个文件放到与upx同一个文件夹里: 输入指令./upx text.exe 即可加壳 使用IDA打开,可以明显发现被upx加壳了,其大小也由原来的55kb压缩到42KB: 去壳: 工具去壳: 使用指令./upx -d text.exe即可脱壳大小也变回去了,用…

vscode remote ssh内存异常占用高问题

参考:https://blog.csdn.net/sigmarising/article/details/107615035 点开设置搜索search.follow。在用户/远程/工作区都取消勾选Follow Symlinks,如图所示。

Hook(钩子技术)

一.介绍 1.当代码执行到某行时,获取寄存器值和内存里的值,进行调试分析,例如hook明文包. 2.当代码执行到某行时,插入想执行的代码.例如迅雷拦截发包函数. 3.当代码执行到某行时,修改寄存器,达到某些篡改目的. 拿FishingKit这道题举例就是本来运行流程是: a--->b 而使用了H…