HBase 无法写入数据到某张表,服务状态均正常,并且可能只是某一张表或者部分表发生无法写入问题,那么此时可能是某一个或几个 RegionServer 出了问题,使其状态变更为 PENDING_CLOSE,从而无法写入数据,但是它们的服务状态可能仍然显示为正常。

注:这其中的一种可能的情况,不能证明所有的无法写入的问题均来自于此。

1. 检查 Regions in Transition

cloudera manager为例

登录cloudera manager -> HBase -> Master -> Master (活动) -> HBase WEB UI, 进入Master-status页面。

往下拉,找到Regions in Transition节点(正常则没有),如果看到如下信息(server 信息已被屏蔽):

hbase regions 没有自动均衡 hbase regions in transition_cloudera

那么说明有一个 Region 处于 PENDING_CLOSE

Region-In-Transition 说的是 Region 变迁机制,实际上是指在一次特定操作行为中 Region 状态的变迁,其状态包括:OPEN -> PENDING_CLOSE -> CLOSING -> CLOSED。

摘抄于 http://hbasefly.com/2016/09/08/hbase-rit/,更多 Region-In-Trasition 相关内容请阅读原文。

2. 重启 Region

解决的最简单的办法就是重启了,毕竟网管大法好。

依次进入cloudera manager -> HBase -> RegionServer,在右侧的列表中找到出问题的 RegionServer(主机名与上图中 server 相等),点击 RegionServer进入 Region 管理页面,然后重启该 Region(因涉及到公司服务器相关信息,所以就不放截图了)。

3. RegionServer 检查

按照第1步再次进入Master-status页面,往下拉,找到Tasks节点,可以看到如下信息:

hbase regions 没有自动均衡 hbase regions in transition_重启_02

这是在完成第2步重启 Region 后的任务信息,继续下拉,发现无法找到 Regions in Transition 节点(这里仅有一个 RegionServer 除了问题,所以正常后便消失了),此时说明 RegionServer 恢复正常。

4. 数据一致性检查

Resion 发生问题后,最担心的莫过于数据是否仍然保持一致性,此时可登录对应集群的任一服务器,输入如下命令:

sudo -u hbase hbase hbck

输出末尾信息如下(server 名称被屏蔽):

··· 省略

    Deployed on:  xxxx05.xxxx.xxxx,60020,1493260775900
Table dba_test is okay.
    Number of regions: 5
    Deployed on:  xxxx04.xxxx.xxxx,60020,1493260776802 xxxx05.xxxx.xxxx,60020,1493260776083 xxxx06.xxxx.xxxx,60020,1493260776047 xxxx08.xxxx.xxxx,60020,1493260776278
0 inconsistencies detected.

从最后一行的输出可看到,没有存在数据不一致的情况。

5. 完成

尝试重新写入数据,一切正常。

6. 参考资料