HBase運維基礎——元數據逆向修復原理

背景

    鑑於上次一篇文章——「雲HBase小組成功搶救某公司自建HBase集羣,挽救30+T數據」的讀者反饋,對HBase的逆向工程比較感興趣,並諮詢如何使用相應工具進行運維等等。總的來講,就是想更深層理解HBase運維原理,提升運維HBase生產環境的能力,應對各類常見異常現象。不一樣的讀者對hbase的瞭解程度不一樣,本文不打算着重編寫一個工具怎麼使用,而是從HBase的運維基礎知識介紹開始講解。爲了能幫助大部分讀者提升HBase運維能力,後續會寫個「HBase運維繫列」 專題系列文章,歡迎到最下方掃碼關注釘釘交流。運維

5d8291a7eaad73d5ee198c6f017867597e43a164

介紹

    相信不少自建HBase的企業會常常碰到各類各樣的hbase運維問題。好比使用HBase的時候,HBase寫入一段時間後開始RegionServer節點開始掛掉,重啓RegionServer發現啓動很慢,不少region出現RTI問題,致使讀寫某個region的業務hang住了 。還有一些人的HBase集羣屢次運維嘗試後,直接HBase啓動不了了,meta表上線就開始報錯,致使最終業務不能正常上線運行等等系列問題。本文就HBase運維的原理基礎開始入手,重點講解數據完整性,以及元數據「逆向工程」恢復數據完整性的原理方法。開啓後續一系列的HBase運維知識講解。工具

HBase目錄結構

    本文就1.x版本進行講解,不一樣版本大體相通。HBase在HDFS上會單獨使用一個目錄爲HBase文件目錄的根目錄,一般爲 「/hbase」。基於這個目錄下,會有如下目錄組織結構:spa

 

/hbase/archive (1)
/hbase/corrupt (2) 
/hbase/data/default/TestTable/.tabledesc/.tableinfo.0000000001 (3)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/info/2e58b3e274ba4d889408b05e526d4b7b (4)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/recovered.edits/340.seqid (5)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.regioninfo (6)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.tmp (7)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.splits (8)
/hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.merges (9)
/hbase/data/hbase/acl (10)
/hbase/data/hbase/meta (11)
/hbase/hbase.id (12)
/hbase/hbase.version (13)
/hbase/MasterProcWALs (14)
/hbase/oldWALs (15)
/hbase/.tmp (16)
/hbase/.trashtables/data (17)
/hbase/WALs/tins-donot-rm-test-hb1-004.hbase.9b78df04-b.rds.aliyuncs.com,16020,1523502350378/tins-donot-rm-test-hb1-004.hbase.9b78df04-b.rds.aliyuncs.com%2C16020%2C1523502350378.default.1524538284034 (18)

 

(1) 進行snapshot或者升級的時候使用到的歸檔目錄。compaction刪除hfile的時候,也會把就的hfile歸檔到這裏等。3d

 

(2) splitlog的corrupt目錄,以及corrupt hfile的目錄。日誌

(3) 表的基本屬性信息元文件tableinfo。code

(4) 對應表下的hfile數據文件。
(5) 當splitlog發生時,一個RS的wal會按照region級別split WALs寫到對應目錄下的的recovered.edits目錄上,使得此region再次被open的時候,回放這些recovered.edits 日誌。server

(6) regioninfo文件。blog

(7) compaction等的臨時tmp目錄。權限控制

(8) split時臨時目錄,若是上次region的split沒有完成被中斷了,這個region再open的時候會自動清理這個目錄,通常不須要人工干預。it

(9) merges時的臨時目錄,和split同樣,若是沒有正常完成的時候被中斷了,那麼他會在下次被open的時候自動清理。通常也不須要人工干預。

(10) acl 開啓HBase權限控制時的權限記錄系統表

(11) meta 元數據表,記錄region相關信息

(12) hbase.id 集羣啓動初始化的時候,建立的集羣惟一id。能夠從新fix生成
(13) hbase.version hbase 軟件版本文件,代碼靜態版本,如今都是8
(14) master執行過程程序的狀態保存,用於中斷恢復執行使用。

(15) oldWALs 歷史wal,即wal記錄的數據已經確認持久化了,那麼這些wal就會被移到這裏。splitlog完成的那些就日誌,也會被放到這裏。

(16) tmp 臨時輔助目錄,好比寫一個hbase.id文件,在這裏寫成功後,rename到 /hbase/hbase.id

(17) /hbase/.trashtables/data 當truncate table或者delete table的時候,這些數據會臨時放在這裏,默認1小時內被清

(18) 記錄着一臺RegionServer上的WAL日誌文件。能夠看到它是regionserver名字是有時間的,即下一次啓動時RS的wal目錄就會使用新的目錄結構存放wal,這個舊的RS wal 目錄就會被splitlog過程拆分回放

相關文章
相關標籤/搜索