前提: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