近期和一个朋友交流,他们的业务系统使用HBase做为底层的数据存储。高峰期的时候偶尔出现org.apache.hadoop.hbase.NotServingRegionException,严重影响了业务系统的正常运行。分析日志后得到这样的错误:
1、刚开始报,org.apache.hadoop.hbase.NotServingRegionException ********,is not online
2、然后报 ,org.apache.hadoop.hbase.NotServingRegionException ***********, is closing
其实这个错误在网上很多的解释,每个说法各不相同。昨夜翻看了下Hbase的源码,在这里给出权威的解答和解决方案。
当Hbase运行时候,region达到了设置的文件大小后,就要开始分裂了。分裂的过程是:
1)老region开始下线 ,这里就对应了报错日志中的is not online
2)老region分裂
3)老region关闭,这里就对应了报错日志中的 is closing
其实罪魁祸首还是region分裂导致的,那么问题来了,Hbase肯定是要分裂的,如何避免这个问题再次发生呢?
以下给出解决措施,以hbase0.98版本为例:
1、设置按个region的大小为无限大,其实也就是不要region分裂了
2、半夜的时候通过程序来检测每个region的大小,比如20G为一个region文件大小,超过20G了就做分裂
以上思路,具体如何设置百度上很多,后续在本博客也会介绍。