hbase 在線修復集群命令


前提:HDFS fsck確保hbase根目錄下文件沒有損壞丟失,如果有,則先進行corrupt block移除。
切記:一定要在所有Region都上線之后再修復,否則修復之后可能出現重復Region。

步驟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表上對應的行信息。

 


其他hbase修復集群命令:
新版本的 hbck 可以修復各種錯誤,修復選項是:   
(1)-fix,向下兼容用,被-fixAssignments替代   
(2)-fixAssignments,用於修復region assignments錯誤   
(3)-fixMeta,用於修復meta表的問題,前提是HDFS上面的region info信息有並且正確。   
(4)-fixHdfsHoles,修復region holes(空洞,某個區間沒有region)問題   
(5)-fixHdfsOrphans,修復Orphan region(hdfs上面沒有.regioninfo的region)   
(6)-fixHdfsOverlaps,修復region overlaps(區間重疊)問題   
(7)-fixVersionFile,修復缺失hbase.version文件的問題   
(8)-maxMerge <n> (n默認是5),當region有重疊是,需要合並region,一次合並的region數最大不超過這個值。   
(9)-sidelineBigOverlaps ,當修復region overlaps問題時,允許跟其他region重疊次數最多的一些region不參與(修復后,可以把沒有參與的數據通過bulk load加載到相應的region)   
(10)-maxOverlapsToSideline <n> (n默認是2),當修復region overlaps問題時,一組里最多允許多少個region不參與   
由於選項較多,所以有兩個簡寫的選項   
(11) -repair,相當於-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps   
(12)-repairHoles,相當於-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans   
   
   
   
新版本的 hbck   
(1)缺失hbase.version文件   
 加上選項 -fixVersionFile 解決   
(2)如果一個region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中   
 加上選項 -fixAssignments 解決   
(3)如果一個region在META表中,並且在regionserver的online region集合中,但是在hdfs上面沒有   
 加上選項 -fixAssignments -fixMeta 解決,( -fixAssignments告訴regionserver close region),( -fixMeta刪除META表中region的記錄)   
(4)如果一個region在META表中沒有記錄,沒有被regionserver服務,但是在hdfs上面有   
加上選項 -fixMeta -fixAssignments 解決,( -fixAssignments 用於assign region),( -fixMeta用於在META表中添加region的記錄)   
(5)如果一個region在META表中沒有記錄,在hdfs上面有,被regionserver服務了   
加上選項 -fixMeta 解決,在META表中添加這個region的記錄,先undeploy region,后assign   
(6)如果一個region在META表中有記錄,但是在hdfs上面沒有,並且沒有被regionserver服務   
加上選項 -fixMeta 解決,刪除META表中的記錄   
(7)如果一個region在META表中有記錄,在hdfs上面也有,table不是disabled的,但是這個region沒有被服務   
加上選項 -fixAssignments 解決,assign這個region   
(8)如果一個region在META表中有記錄,在hdfs上面也有,table是disabled的,但是這個region被某個regionserver服務了   
加上選項 -fixAssignments 解決,undeploy這個region   
(9)如果一個region在META表中有記錄,在hdfs上面也有,table不是disabled的,但是這個region被多個regionserver服務了   
加上選項 -fixAssignments 解決,通知所有regionserver close region,然后assign region   
(10)如果一個region在META表中,在hdfs上面也有,也應該被服務,但是META表中記錄的regionserver和實際所在的regionserver不相符   
加上選項 -fixAssignments 解決   
   
(11)region holes   
需要加上 -fixHdfsHoles ,創建一個新的空region,填補空洞,但是不assign 這個 region,也不在META表中添加這個region的相關信息   
(12)region在hdfs上面沒有.regioninfo文件   
-fixHdfsOrphans 解決   
(13)region overlaps   
需要加上 -fixHdfsOverlaps   
   
   
說明:   
(1)修復region holes時,-fixHdfsHoles 選項只是創建了一個新的空region,填補上了這個區間,還需要加上-fixAssignments -fixMeta 來解決問題,( -fixAssignments 用於assign region),( -fixMeta用於在META表中添加region的記錄),
所以有了組合拳 -repairHoles 修復region holes,相當於-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans (2) -fixAssignments,用於修復region沒有assign、不應該assign、assign了多次的問題 (3)-fixMeta,如果hdfs上面沒有,那么從META表中刪除相應的記錄,如果hdfs上面有,在META表中添加上相應的記錄信息 (4)-repair 打開所有的修復選項,相當於-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps 新版本的hbck從(1)hdfs目錄(2)META(3)RegionServer這三處獲得region的Table和Region的相關信息,根據這些信息判斷並repair

 





借鑒:https://www.cnblogs.com/quchunhui/p/9583746.html
https://blog.csdn.net/liliwei0213/article/details/53639275


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM