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地址为:GitHub - apache/hbase-operator-tools: Apache HBase Operator Tools

在使用时可以把代码拉到本地,修改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 工具包路径> <命令参数>

HBCK 功能

1. bypass

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

hbase hbck -j <HBCK jar 包路径> -skip bypass [options] <procedure PID>

其中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 <HBCK jar 包路径> -skip assigns [options] <regionname>

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

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

hbase hbck -j <HBCK jar 包路径> -skip unassigns [options] <regionname>

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

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

hbase hbck -j <HBCK jar 包路径> -skip setTableState <tablename> <STATE>

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

hbase hbck -j <HBCK jar 包路径> -skip replication <tablename>

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

hbase hbck -j <HBCK jar 包路径> -skip filesystem <tablename>

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

hbase hbck -j <HBCK jar 包路径> -skip reportMissingRegionsInMeta <namespace|namespace:tablename>

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

hbase hbck -j <HBCK jar 包路径> -skip addFsRegionsMissingInMeta <namespace|namespace:tablename>

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

hbase hbck -j <HBCK jar 包路径> -skip setRegionState <regionname> <state>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值