業務場景:
RocketMQ+Storm+Hbase
組件版本:
RocketMQ:3.4.6
Storm:1.2.1
Hbase:1.2.1
1. 問題描述
4月15號早上發現業務系統前一天數據量明顯偏低,查看系統發現storm入Hbase的TPS很低,甚至為0。
2. 問題定位
通過查看Hbase和Storm監控頁面,發現dscn18節點不在服務中,遠程連接比較卡頓,去機房查看沒有報警,通過終端查看HRegionServer和Supervisor進程都在,15號上午11點多查看系統日志:/var/log/message:
系統日志:
重啟后,日志變為正常
綜上判斷可能是因為網絡通信原因導致dscn18節點異常。
Hbase日志:顯示dscn18,region已下線
Storm日志:顯示連接超時
Hbase監控頁面:RIT問題
綜上,可判斷,由於dscn18節點連接異常,導致當前節點Hbase和Storm的服務異常,另外Hbase出現RIT,會影響Hbase的寫入。
3. 解決過程
當時嘗試重啟拓撲,但寫入TPS很低,后來將dscn18的Regionserver下線,效果仍不理想,最后決定做Hbase在線修復(dscn18已下線):
當時Hbase狀態:
步驟:
1. hbase hbck 檢查輸出所以ERROR信息,每個ERROR都會說明錯誤信息。
2. hbase hbck -fixTableOrphans 先修復tableinfo缺失問題,根據內存cache或者hdfs table 目錄結構,重新生成tableinfo文件。
3. hbase hbck -fixHdfsOrphans 修復regioninfo缺失問題,根據region目錄下的hfile重新生成regioninfo文件。
4. hbase hbck -fixHdfsOverlaps 修復region重疊問題,merge重疊的region為一個region目錄,並從新生成一個regioninfo。
5. hbase hbck -fixHdfsHoles 修復region缺失,利用缺失的rowkey范圍邊界,生成新的region目錄以及regioninfo填補這個空洞。
6. hbase hbck -fixMeta 修復meta表信息,利用regioninfo信息,重新生成對應meta row填寫到meta表中,並為其填寫默認的分配regionserver。
7. hbase hbck -fixAssignments 把這些offline的region觸發上線,當region開始重新open 上線的時候,會被重新分配到真實的RegionServer上 , 並更新meta表上對應的行信息。
另外,當執行完所有修復步驟后仍然有:
ERROR: Empty REGIONINFO_QUALIFIER found in hbase:meta
執行:
hbase hbck -fixEmptyMetaCells
當時修復了近三個小時,修復完成后,重啟了Hbase,RIT異常解決了,再次檢查出現了新的問題:
1、元數據缺失
2、region重疊
再利用之前的修復命令無法修復。通過協商得到解決辦法:
針對1:
通過執行hbase hbck -fixEmptyMetaCells
修復 ERROR: Empty REGIONINFO_QUALIFIER found in hbase:meta
針對2:
delete 'hbase:meta','DBN_YTO,601889669485241086,1536145292692.f47aaa41740bf9d99b1cc19b3de29d9b.','info:regioninfo'
delete 'hbase:meta','DBN_YTO,601889669485241086,1546409804387.7795e5726f6f9e018cfa2fe93b20556d.','info:regioninfo'
hdfs dfs -rm -r /hbase/data/default/DBN_YTO/f47aaa41740bf9d99b1cc19b3de29d9b
hdfs dfs -rm -r /hbase/data/default/DBN_YTO/7795e5726f6f9e018cfa2fe93b20556d
最后執行:
hbase hbck -fixAssignments -fixMeta -fixHdfsHoles
Hbase狀態為正常,到此Hbase修復完畢!
之后重啟合並Storm,個別端口連接被占用,重啟Storm后檢查無僵屍進程,最終將worker數由400改為340(17個Storm節點),任務啟動成功,總TPS達到8萬左右,到此問題解決完畢。
4. 總結
Hbase在線修復之前首先保證停掉相關業務,並且確保所有region都在線,否則修復可能會產生重復region,另外確保hbase根目錄下文件沒有損壞丟失,如果有,先移除掉,再修復。
移除命令:
hdfs fsck -delete
/hbase/back/SJYB_FEDEX/fedex_back/e90da00b658869d9e8ec90b871637adc/if/5612ded9b14341e19160bdc7238bf4da