hbase hbck

HBaseFsck (HBCK)工具可以检测 HBase 集群中 Region 的一致性和完整性,同时可以对损坏的集群进行修复。

HBCK 主要工作在两种模式下:一致性检测只读模式和多阶段修复模式。

HBase 集群一致性状态

HBase 集群一致性主要包括两个方面:

  • HBase Region 一致性:集群中所有 Region 都被 assign,而且 deploy 到唯一一台 RegionServer 上,并且该 Region 的状态在内存中、hbase:meta 表中以及 ZooKeeper 这三个地方需要保持一致。
  • HBase 表完整性:对于集群中任意一张表,每个 rowkey 都仅能存在于一个 Region 区间。

HBCK 的集群一致性状态检测

执行 hbase hbck 命令来检查 Hbase 集群是否存在损坏,命令执行后,在窗口中输出集群所有 Region 一致性和完整性的检查信息,并在最后输出检查结果:OK 或者 INCONSISTENCIES

通常需要执行多次 hbck 命令以防止部分 Region 出现临时性的非一致性状态,比如刚好有些 Region 在执行 split、merge 或者 move 操作。一个好的运维习惯是,间隔性(比如每天晚上执行)地执行 hbck 命令,并在多次出现不一致的情况下发出报警信息。集群如果存在不一致的 Region,HBCK 会在窗口输出基本的报告信息,可以加上 -details 选项来获取更多的细节:

有时候集群规模很大,包含几万甚至几十万的 Region,对整个集群执行一次 hbck 命令可能会比较耗时。HBCK 允许管理员通过如下方式只针对某些表进行一致性、完整性检测。

hbase hbck tableName1 tableName2 ……

如果发现集群有不一致的情况,就需要尝试进行修复。

集群修复的基本原则是首先修复低风险的 Region 一致性问题(以及部分表完整性问题),再谨慎修复部分高风险的表完整性问题(overlap问题)。

HBCK 的局部低危修复

低风险的 Region 一致性问题修复是指,这类修复仅仅涉及 Master 内存中 Region 状态、ZooKeeper 临时节点中 Region 状态以及 hbase:meta 元数据表中 Region 状态的修改,并不实际修改任何 HDFS 文件。修复成功之后,Region 的状态在 .regioninfo 文件、Master 内存、ZooKeeper 临时节点和 hbase:meta 元数据表中保持一致。

Region 一致性问题修复有两个基本选项:

  • -fixAssignments :修复 assign 相关问题,如没有 assigned、assign 不正确或者同时 assign 到多台 RegionServer 的问题 Regions。
  • -fixMeta:主要修复 .regioninfo 文件和 hbase:meta 元数据表的不一致。修复原则是以 HDFS 文件为准。如果 Region 在 HDFS 上存在,但在 hbase:meta 表中不存在,就会在 hbase:meta 表中添加一条记录。反之如果在 HDFS 上不存在,而在 hbase:meta 表中存在,就会将 hbase:meta 表中对应的记录删除。

除了 Region 一致性问题是低风险问题之外,部分表完整性问题的风险也不高。最典型的就是 HDFS Region 空洞(HDFS Region holes)。
这类问题可以添加 -fixHdfsHoles 选项进行修复,这个命令会在空洞形成的地方填充一个空 Region。另外,这个命令通常不单独使用,而是和 -fixMeta、-fixAssignments一起使用:

hbaes hbck -fixAssignments -fixMeta -fixHdfsHoles

 或者使用选项 -repairHoles,等价于上述命令:

hbase hbck -repairHoles

HBCK 的高危修复

Region 区间 overlap 相关问题的修复属于高危修复操作,因为这类修复通常需要修改 HDFS 上的文件,有时甚至需要人工介入。对于这类高危修复,建议先执行 hbck -details 命令,详细了解更多的问题细节,再执行相应的修复命令。建议在 overlap 分析的基础上使用 merge 命令,强制将存在 overlap 的相关 Region 全部合并到一起。需要注意的是,对于多个 Region,需要两两合并,之后对合并后的 Region 执行 MajorCompaction,再两两合并。

HBase version file 丢失

HBase 集群启动时会加载 HDFS 上的 version file(/hbase-root/hbase.version)来确定 HBase 的版本信息,如果该文件丢失或损坏,则系统无法正常启动。此时可以使用如下命令进行修复,命令会重新生成一份 hbase.version 文件,文件中 HBase 集群版本信息来自当前运行的 HBCK 版本。

hbase hbck -fixVersionFile

对于 HBCK 工具,总结最好的实践方式如下:

  1. 周期性地多次执行 hbck 命令,对集群进行定期体检,如果发现异常则报警。
  2. 若能对表执行 hbck 修复,就对表进行修复,而不要对整个集群进行修复操作。
  3. 大多数导致集群不一致的问题是“ not deployed on any region server ”,可以放心使用 -fixAssignments 进行修复
  4. 对于其他 overlap 的情况,需要管理员认真分析,再谨慎使用 hbck 命令进行修复。如果可以手动修复,建议手动修复。
  5. 如果使用 HBCK 工具无法修复集群的不一致,需要结合日志进行进一步分析,决定修复方案。

《Hbase 原理与实践》笔记

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值