摘要:本文就運維的原理基礎開始入手,重點講解數據完整性,以及元數據逆向工程恢復數據完整性的原理方法。小結本文介紹了運維基礎原理中的數據完整性以及逆向元數據修復原理,并舉例介紹兩個逆向修復元數據的工具和實用執行步驟。
背景
鑒于上次一篇文章——“云HBase小組成功搶救某公司自建HBase集群,挽救30+T數據”的讀者反饋,對HBase的逆向工程比較感興趣,并咨詢如何使用相應工具進行運維等等。總的來說,就是想更深層理解HBase運維原理,提高運維HBase生產環境的能力,應對各種常見異常現象。不同的讀者對hbase的了解程度不同,本文不打算著重編寫一個工具怎么使用,而是從HBase的運維基礎知識介紹開始講解。為了能幫助大部分讀者提高HBase運維能力,后續會寫個“HBase運維系列” 專題系列文章。
相信很多自建HBase的企業會經常碰到各種各樣的hbase運維問題。比如使用HBase的時候,HBase寫入一段時間后開始RegionServer節點開始掛掉,重啟RegionServer發現啟動很慢,很多region出現RTI問題,導致讀寫某個region的業務hang住了 。還有一些人的HBase集群多次運維嘗試后,直接HBase啟動不了了,meta表上線就開始報錯,導致最終業務不能正常上線運行等等系列問題。本文就HBase運維的原理基礎開始入手,重點講解數據完整性,以及元數據“逆向工程”恢復數據完整性的原理方法。開啟后續一系列的HBase運維知識講解。
HBase目錄結構
本文就1.x版本進行講解,不同版本大致相通。HBase在HDFS上會多帶帶使用一個目錄為HBase文件目錄的根目錄,通常為 “/hbase”。基于這個目錄下,會有以下目錄組織結構:
/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歸檔到這里等。
(2) splitlog的corrupt目錄,以及corrupt hfile的目錄。
(3) 表的基本屬性信息元文件tableinfo。
(4) 對應表下的hfile數據文件。
(5) 當splitlog發生時,一個RS的wal會按照region級別split WALs寫到對應目錄下的的recovered.edits目錄上,使得此region再次被open的時候,回放這些recovered.edits 日志。
(6) regioninfo文件。
(7) compaction等的臨時tmp目錄。
(8) split時臨時目錄,如果上次region的split沒有完成被中斷了,這個region再open的時候會自動清理這個目錄,一般不需要人工干預。
(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過程拆分回放
HBase涉及的主要文件及用途HDFS靜態文件,HDFS上的HBase 數據完整性
hfile文件:數據文件,目前最高版本也是默認常用版本為 3。 hfile文件結構細節可以參考官網http://hbase.apache.org/book....。我們這里逆向生成元數據主要使用到了HFile fileinfo的firstkey、lastkey信息。
hfilelink文件: 在hbase snapshot時用到, migration upgrade 也會使用到。很少碰到這類文件的運維問題,這里不作過多介紹。
reference文件:用來指定half hfile,一個region有reference時,這個region不能split。split/merge會創建這個。進行compaction后生成新的hfile后,會把這個reference刪除。hfile的reference文件名格式一般是 hfile.parentEncRegion。如:/hbase/data/default/table/region-one/family/hfilename。其region-two有reference hfile文件名格式為:/hbase/data/default/table/region-two/family/hfile.region-one 通常無效引用就是 region-one的hfile不存在了,那么這個引用就會失效。他的修復方法一般是把reference無效的引用移除。
".regioninfo" 文件,保存著 endkey/offline標志/regionid/regionName/split標志/startkey/tablename等
tableinfo文件這類文件保存著 tableName/table屬性信息/table級別config信息/family信息。其中family信息保存著 famliyName/famiy屬性/famliy級別config信息等。
通常,table屬性有:REGION_MEMSTORE_REPLICATION,PRIORITY,IS_ROOT_KEY等,一般這些屬性默認也是根據配置的一樣。family屬性有:BLOCKSIZE,TTL,REPLICATION_SCOPE等,一般屬性是根據配置使用默認的。
hbase:meta表數據內容格式
regionname, info:regioninfo, regioninfo的encodeValue值
regionname, info:seqnumDuringOpen, 序列號
regionname, info:server, region所在的server名
regionname, info:serverstartcode, regionserver 啟動的timestamp
元數據逆向生成原理上述介紹的數據文件中,HBase的主要的元數據主要由meta表、tableinfo、regioninfo構成。這里的逆向生成元數據指的是,根據數據hfile數據文件,反向生成regioninfo/tableinfo/meta表的過程。
1. 逆向生成tableinfo文件
case1. 通過從master進程內存中的tabledescritor cache 完整恢復tableinfo文件,此時恢復的tableinfo是完整的,和之前的完全一樣。
case2. 當cache中沒有加載過此表的tableinfo時,修復過程只能從表的目錄結構list所有familyNames 來恢復tableinfo,這個時候只能得到的是列簇的名字,恢復tableinfo文件內容中,除了表名、列簇名一致,其他的屬性均采用默認值。這個時候如果運維人員知道有什么屬性是自定義進去的,那么就需要要手動再次添加進去。
2. 逆向生成regioninfo文件
hfile 中的fileinfo讀取firstkey/lastkey 排好序,得到region下所有hfile的最大rowkey和最小rowkey,并根據tableinfo中的表名 完整恢復 regioninfo文件。主要這里只能恢復 表明/startkey/endkey, 其他屬性如:offline標志,regionName,split標志,hashcode等均使用代碼生成或者配置的默認值。
3. 逆向填充meta表行
regioninfo文件序列化,填入meta表 info:regioninfo 列,并同時寫入默認的server,等它被再次open的時候,重新分配region到實際的regionserver上,并更新這里的數據行。
逆向工程除了上面的直接文件、數據內容修復外,還涉及到數據的完整性其他方面修復。一個表示由無窮小的rowkey到無窮大的rowkey范圍組成,還可能會發生的問題如:region空洞、region重疊現象,如:
如果有region空洞的時候,就會使用他們的空洞邊界作為startkey/endkey,再修復創建一個region目錄及目錄下的regioninfo文件。如果是region重疊,則會把重疊的region進行合并,取所有region的最大最小rowkey作為merge后新region的最大最小rowkey。
元數據工具修復元數據的缺少或者完整性有問題,會影響系統運行,甚至集群直接不可用。最常見的如 meta表上線失敗,region 上線open失敗等。這里介紹兩個工具,?工具一: hbase hbck 在線修復完整性修復元數據信息,?工具二:OfflineMetaRepair 離線重建 hbase:meta 元數據表。
在線hbck修復:
?前提:HDFS fsck 確保 hbase跟目錄下文件沒有損壞丟失,如果有,則先進行corrupt block 移除。
?步驟1. hbase hbck 檢查輸出所以ERROR信息,每個ERROR都會說明錯誤信息。
?步驟2. hbase hbck -fixTableOrphones 先修復tableinfo缺失問題,根據內存cache或者hdfs table 目錄結構,重新生成tableinfo文件。
?步驟3. hbase hbck -fixHdfsOrphones 修復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 -fixAssignment 把這些offline的region觸發上線,當region開始重新open 上線的時候,會被重新分配到真實的RegionServer上 , 并更新meta表上對應的行信息。
?
離線OfflineMetaRepair重建?:
前提:HDFS fsck 確保 hbase跟目錄下文件沒有損壞丟失,如果有,則先進行corrupt block 移除
?步驟1: 執行 hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair -fix
最后,兩個工具使用說明都比較詳細,經過上面的基礎介紹,相信都會看的懂的。這里不對工具再細致說明,工具的說明可以參考官網或者工具提示。?題外話,有些開源組件設計的時候,向hbase元數據文件寫入一些特有的信息,但是并沒有修改到hbase工具的修復工具,或者它自己沒有維護修復工具,如果這類文件損壞、丟失了,那么相應的組件就會運行不正常。使用這類組件的用戶,應該不僅記錄好你的表的基本結構,還要記錄表的屬性配置等,當發生修復運維行為的時候,主要再次核對確認。
?小結本文介紹了運維hbase基礎原理中的數據完整性以及逆向元數據修復原理,并舉例介紹兩個逆向修復元數據的工具和實用執行步驟。后續會出系列文章,說明更多hbase運維基礎、運作原理等,希望對大家的運維和使用HBase有所幫助。
詳情請閱讀原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8053.html
摘要:特點有聚合運算相關算法,時序數據庫相對于關系型數據庫沒有特別復雜的查詢,最常見的使用類型是寬表使用,在此基礎上做一些聚合算法插值查詢。 首先簡單介紹一下網易杭州研究院情況簡介,如下圖所示: showImg(https://segmentfault.com/img/bVbni6K?w=720&h=285); 我們公司主要從事平臺技術開發和建設方面,工作的重點方向主要在解決用戶在數據治理中...
摘要:企業微信截圖企業微信截圖兼容最廣的一站式智能大數據平臺涵蓋了等眾多開源大數據組件,支持對這些組件進行運維中臺建設數據開發業務可視化等全棧式大數據開發運維管理。通過一站式智能大數據平臺支持的等分布式運算框架,可以高效的進行機器學習應用開發。背景在大數據業務系統中,所有技術棧生態均是圍繞著存儲進行擴展的,目前開源的主流存儲技術棧主要包含如下 3 種類型:· HDFS:Hadoop 系列套件,包含...
摘要:機器學習機器學習通過算法對大量數據進行分析,挖掘出其中蘊含的規律,并用于事物預測或者分類,有大量的計算需求。通過一站式智能大數據平臺支持的等分布式運算框架,可以高效的進行機器學習應用開發。在大數據業務系統中,所有技術棧生態均是圍繞著存儲進行擴展的,目前開源的主流存儲技術棧主要包含如下 3 種類型:· HDFS:Hadoop 系列套件,包含 Hive、Hbase、Phoenix 等;· Ela...
閱讀 3813·2021-10-12 10:11
閱讀 3637·2021-09-13 10:27
閱讀 2540·2019-08-30 15:53
閱讀 1972·2019-08-29 18:33
閱讀 2189·2019-08-29 14:03
閱讀 994·2019-08-29 13:27
閱讀 3316·2019-08-28 18:07
閱讀 763·2019-08-26 13:23