问题说明:
首先,HBase服务不可用,重启HBase集群后,问题依旧,执行hbase hbck命令检查region是否正常,发现没有正常挂载,使用hbase hbck -fix命令修复,还是不能修复,看日志发现ERROR: Found inconsistency in table XX。
原因分析:
经过分析发现,某些数据在hdfs上有,但是,hbase的region上没有,出现数据不一致的情况。HBase集群配置参数中有两项“hbase.regionserver.handler.count”(处理普通用户级别的程序实例的数量,默认值100)和“hbase.regionserver.metahandler.count”(处理优先请求的程序实例的数量默认值10),提交作业的用户属于supergroup用户组,所以,作业的所有请求都被视为优先的,由于请求数量较多,metahandler一直处于繁忙状态,而此时region的上线需要metahandler来处理,但是由于一直处于繁忙状态,所以,region无法上线,也就无法修复数据不一致的问题。
解决办法:
修改“hbase.regionserver.metahandler.count”参数,将数值调大,改为100之后,重启hbase集群,问题得到解决。
问题总结:
在开启安全模式下,对角色管理,用户管理和权限管理的使用和分配应该严格按照标准执行,不要对任何用户随意的赋予超级管理组的权限,角色和权限在满足使用要求的前提下,要尽可能的回收,避免权限过度。