HBase 无法写入数据到某张表,服务状态均正常,并且可能只是某一张表或者部分表发生无法写入问题,那么此时可能是某一个或几个 RegionServer 出了问题,使其状态变更为 PENDING_CLOSE
,从而无法写入数据,但是它们的服务状态可能仍然显示为正常。
注:这其中的一种可能的情况,不能证明所有的无法写入的问题均来自于此。
1. 检查 Regions in Transition
以
cloudera manager
为例
登录cloudera manager
-> HBase
-> Master
-> Master (活动)
-> HBase WEB UI
, 进入Master-status
页面。
往下拉,找到Regions in Transition
节点(正常则没有),如果看到如下信息(server 信息已被屏蔽):
那么说明有一个 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
节点,可以看到如下信息:
这是在完成第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. 参考资料