近期和一個朋友交流,他們的業務系統使用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了就做分裂
以上思路,具體如何設置百度上很多,後續在本博客也會介紹。