HBCK2工具使用说明

HBCK2工具使用说明,第1张

HBCK2工具使用说明 HBCK2工具介绍

在实际生产环境中,会因为各种各样的因素(如用户的误 *** 作、HDFS 故障、Hbase 集群节点掉电等),可能使Hbase 集群出现故障,导致集群不可用,常见的故障有Region 出现RIT 问题、Procedure出现卡死情况等。为了解决这些问题,Hbase社区提供了HBCK 工具来进行修复。在Hbase1.x版本中自带hbck(即hbck-1)工具包命令,可以直接去向 region server 或者 hdfs 发送请求进行修复,但是在Hbase2.x版本中集群内部 *** 作全部都被挪到了 procedure v2(下文都称 为 procedure)上进行处理,因为所有的命令都是经过 master 来协调处理,所以在修复时也需要通过 master 进行修复。否则反而可能导致更严重的不一致问题。所以 hbck-1 在 Hbase-2.x 版本是不适用的。除此以外,很多 hbck-1 需要处理的问题对于使用 procedure 的 Hbase-2.x 已经 不再是问题了,所以相比起 hbck-1 来说也精简了很多功能。
需要说明的是Hbase2.0版本自身并不 提供HBCK命令,而是通过单独的HBCK2工具提供,该工具包的git地址为:https://github.com/apache/hbase-operator-tools.git

在使用时可以把代码拉到本地,修改hbase的版本号,然后重新编译得到工具包:hbase-hbck2-1.1.0-SNAPSHOT.jar

Procedure 简介

由于HBCK 工具通常是通过修复Procedure 来解决Hbase 集群故障的,因此在介绍HBCK 工具的
功能之前有必要先介绍Procedure。

在Hbase2 集群中,几乎所有的集群 *** 作都是通过Procedure 来进行的,Hbase 在执行Procedure
的时候可能会存在一些不正常的情况,HBCK 的作用就是修复不正常的Procedure。在Hbase2 中,一个Procedure 是由一系列的 *** 作组成的,可以将一个Procedure 看作一次事务,Procedure 完成之后,只存在两种状态,要么执行成功,要么失败回滚,并不存在中间状态。

一次Procedure 包含了多个 *** 作,每一个 *** 作的执行都会以log 的形式持久化在WALs 中,这样可
以保证即使Hbase 集群断电重启,也可以基于保存的日志来恢复之前的状态并继续执行。

由于Procedure 在执行过程中,包含若干个步骤,在此过程中,可能会持有多个锁对象,因此在处
理某一步骤的时候,可能由于异常原因导致锁无法释放,从而出现卡死情况,导致Procedure 迟迟
不能结束。

示例说明:Hbase 的assign region *** 作是一个Procedure,在此过程中,Procedure 会对这个region进行上锁 *** 作,上锁的目的是为了防止在此过程中有其他用户去这个region 执行 *** 作,如unassignregion、drop 该region 所对应的表,从而导致Hbase 集群中数据出现不一致情况。但是如果在assign region 的时候,由于一些异常情况,导致迟迟无法分配完成,更加糟糕的是如果这个region 恰恰就属于meta 表,那么就会出现Hbase 的HMaster服务一直处于正在初始化状态,从而导致整个Hbase集群不可用,如下图:

 Procedure 在执行过程中,可能会持有两类锁:

  1. IdLock:Procedure 层级的锁,保证一个Procedure 不会被多个线程同时执行。
  2. 资源锁:对Hbase 内部的资源进行加锁,不同的Procedure 加锁的粒度是不同的,目前有region、table、namespace、region server 层级

所有Procedure记录和状态在Hbase的ui上可以看到:

  HBCK 工具命令格式

HBCK 工具包的使用方式如下:

hbase hbck -j  <命令参数>
HBCK 功能

1. bypass

bypass 命令可以将卡住的一个或多个Procedure 释放掉。命令如下:

hbase hbck -j  -skip bypass [options] 

其中Procedure PID 可以在Hbase Master UI 中查看。

[options]的值可以是:
• -o,在执行bypass 之前会先尝试获取IdLock 对象,如果Procedure 还在运行就可能会导致
无法获取到ldLock,从而导致执行超时返回null,一旦设置了-o 参数,即使拿不到ldLock 对
象,也会将Procedure 的bypass flag 设置为true。
• -r,一个Procedure 可能会拥有子Procedure,一旦设置了-r 那么就会递归bypass,将该
Procedure 的所有子任务也bypass 掉。
• –w,设置等待获取idlock 的超时时间,默认是1ms。

2. assign

该命令的作用就是将region 再次随机分配到别的机器上,返回值如果是-1 表示执行失败,其他值则
是Procedure 的PID,表示命令执行成功。命令如下:

hbase hbck -j  -skip assigns [options] 

[options]的值可以是:
• -o ,此处的-o 参数和bypass 的-o 参数意义不同,assign 命令是新创建一个Procedure,因
此与其他procedure 的IdLock 不冲突,但是如果其他的procedure 是因为资源锁而卡住的话,
就会影响assign 的Procedure,-o 的作用就是释放掉资源锁,防止因锁资源而出现卡死情
况。

3. unassign
该命令可以将一个或者多个region unassign 掉。该命令的返回值为-1 表示执行命令失败,返回值
为其他时表示命令执行成功,返回值为创建的Procedure PID。

hbase hbck -j  -skip unassigns [options] 

[options]的值可以是:
• -o,-o 和assign 的-o 参数作用一样,不再赘述。

4. setTableState
HbaseTable 可能的状态有ENABLE、DISABLE、DISABLING、ENABLING。
当Table 的状态和所有的region 状态不一致的时候可以使用此命令进行修复。

hbase hbck -j  -skip setTableState  

5. replication
在副本待删除队列中查找指定表所属的副本,并且删除。

hbase hbck -j  -skip replication 

6. filesystem
检查指定表的HFile 文件。

hbase hbck -j  -skip filesystem 

7. reportMissingRegionsInmeta
检查指定表或者指定命名空间是否存在丢失region。

hbase hbck -j  -skip reportMissingRegionsInmeta 

8. addFsRegionsMissingInmeta
这个和reportMissingRegionsInmeta 功能结合使用,当执行reportMissingRegionsInmeta 命令发现
有missing 的regions,可以执行此命令进行修复,能够修复成功的前提是region 虽然missing,但
是所属的HFile 在HDFS 上还存在。

hbase hbck -j  -skip addFsRegionsMissingInmeta 

9. setRegionState
此命令可以将指定的region 设定到指定状态,此命令慎用,用户手动执行后,可能会导致region
出现数据不一致情况。

hbase hbck -j  -skip setRegionState  

这里需要注意的是,通过此功能仅仅是更新了Hbase meta 表中的对应region 的状态值。
region 可能存在的状态有:OFFLINE,OPENING,OPEN,CLOSING,CLOSED,SPLITTING,
SPLIT , FAILED_OPEN , FAILED_CLOSE , MERGING , MERGED , SPLITTING_NEW ,
MERGING_NEW,BNORMALLY_CLOSED。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5118199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存