999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

關于HBase Region Overlap問題自動修復的研究

2022-06-18 02:27:06叢儲俊張偉
新型工業化 2022年3期
關鍵詞:故障

叢儲俊,張偉

(上海威士頓信息技術股份有限公司,上海 200052)

0 引言

Hadoop集群以其開源、廉價、易拓展、社區資源豐富等特點,近年來成為大數據存儲與分析方面最受歡迎的平臺。不論是傳統行業、金融業還是互聯網行業都青睞于將傳統數據倉庫遷移至Hadoop的分布式存儲系統中。

HBase是一個基于Java、開源、NoSQL、非關系型、面向列的、構建于Hadoop分布式文件系統( HDFS )上的、仿照谷歌的BigTable的論文開發的分布式數據庫。

HBase是要建立一個可容錯并托管一些大的數據稀疏表(億元/兆行數以百萬計列 )的應用,同時允許非常低的延遲和近實時的隨機讀取和隨機寫入。

HBase的設計保證了“以一致性為前提的可用性”,并且由于能夠快速自動完成故障轉移,因此也具有高可用性。

HBase將數據存儲在表(table)中,一個HBase表由一個或者多個列簇(CF,column family)組成,一個列簇又包含很多列(稱為列限定符,簡稱“CQ”,column qualifier ),每列存儲相應的值。一行由很多列組成,全部由相同的行鍵(rowkey)引用。一個特定的列和一個行鍵稱為單元格(cell)。一個單元格可以有很多版本,由不同時間戳的版本來區分。HBase會根據字節值將行鍵進行排序[1]。

物理上,一個表由一個或者多個region組成,一個region由一個或者多個列簇組成,一個列簇由一個store組成,一個store由唯一的MemStore(HBase 2.x以后支持多個MemStore)加上一個或者多個HFile組成,HFile又是由 block組成的,而block是由cell組成的。

所有的行以及相關的列一起形成了一張表。但是,為了提供可擴展以及快速隨機訪問的功能,HBase不得不將數據分布在多個服務器中。為了達到這個目的,表被分割成多個region存儲,每個region將會存儲一個指定區間的數據。region將會被分配到Region Server上,Region Server提供對于每個region的內容訪問服務。當新的region被創建后,過了配置的一段時間后,HBase的負載平衡器將會把region移動到其他的Region Server上,以確保HBase集群負載均衡。

每個region都有一個起始鍵和一個結束鍵來定義它的邊界,稱之為rowkey范圍。所有這些信息將隨著文件保存在region中,也會保存在hbase:meta表中(對于HBase 0.96之前的版本則保存在 .META. 中)。通過這張表能夠跟蹤所有的 region信息。當region變得太大后,region可以自動分裂或者手動。如果需要,region也可以合并[2]。

正常情況下,一張表的任意兩個region的起始鍵和結束鍵的范圍是彼此不重疊的,這樣的region可以提供正確的讀寫服務,如果由于某些原因導致有重疊的(overlap)region出現,則受影響范圍內的行鍵對應的數據是不能夠讀寫的。

本文就HBase Region Overlap的相關問題進行分析,并提出一種通過代碼進行修復的方式。

1 HBase Region Overlap分析

1.1 HBase的讀寫流程

HBase的讀寫流程比較復雜,有很長的調用鏈,本文只對可能導致region overlap問題出現的步驟以及受region overlap問題影響的步驟進行分析。

HBase寫入流程可以概括為三個階段。

(1)客戶端處理階段:客戶端將用戶的寫入請求進行預處理,并根據集群元數據定位即將寫入數據的region所在的RegionServer,然后將請求發送給對應的RegionServer。

(2)Region寫入階段:Region Server接收到寫入請求之后將數據解析出來,首先寫入WAL(Write-Ahead Log,HBase的實現是HLog),再寫入對應Region列簇的Mem Store。

(3)M em Stor e Fl u sh階段:當Region中Mem Stor e容量超過一定閾值時,系統會異步執行f lush操作,將內存中的數據寫入文件,形成HFile。

在HBase寫入過程中,會首先從Zookeeper那里獲得元數據hbase:meta表所在的Region Server,通過查詢hbase:meta表獲得所寫數據表的region的row key范圍定義以及每個region所在的region server,然后根據代寫的每一條記錄的row key和對應的region server聯系并寫入數據。如果region的row key范圍發生重疊,也就是發生了region overlap問題,則一條記錄可能會對應一個以上的region,無法確定應該寫入哪個region,就導致了數據寫入失敗[3]。

HBase的讀取流程更加復雜,分為get和scan兩大類,這里只描述根據rowkey獲得數據的get方式,這種方式受region overlap 問題的影響比較大。讀取數據的時候,首先會從ZooKeeper中獲取元數據hbase:meta表所在的Region Server,然后獲得待讀取數據表的region的元數據,包括各個region的row key范圍以及所在的Region Server,最后根據row key將讀取請求發送到對應的Region Server進行處理。和寫入數據類似,如果region的row key范圍發生了重疊,也就是發生了region overlap問題,就無法確定應該和哪個RegionServer聯系,就導致了數據讀取失敗。

1.2 HBase的region分裂和合并流程

Region分裂是H Base最核心的功能之一,是H Base實現分布式可擴展性的基礎,類似傳統的My SQL的分庫分表,只不過這一過程是自動的而且分裂的依據固定為row key。概括來說,當數據表的一個region的一個列簇的大小超過一定的閾值就會發生水平分裂,分裂為兩個region。假設原region的row key范圍為[start,end),則分裂后的兩個region的范圍分別為[start1,end1)和[start2,end2),其中start1=start,end2=end,end1=start2。

Region分裂有多種觸發策略可以配置,一旦觸發,HBase會自動尋找分裂點,就是end 1和start2,然后執行真正的分裂操作。目前HBase有多重分裂觸發策略,這些策略與region overlap問題關系不大,所以這里不詳細分析了。

HBase將r egion的分裂過程設計為一個完整的事務,希望整個分裂過程分為三個階段:準備(prepare)、執行(execute)和回滾(rollback)。

Region分裂是個比較復雜的過程,涉及父Region中HFile文件分裂、兩個子Region生成、系統meta元數據更改等很多子步驟,因此必須保證整個分裂過程的原子性,即要么分裂成功,要么分裂失敗,在任何情況下不能出現分裂完成一半的情況。

正常的分裂結果如圖1所示

不正常的分裂結果如圖2所示

2 可能導致Region Overlap的原因

HBase是一個健壯的分布式系統,但是在實際生產過程中由于硬件故障、操作系統故障等原因,偶爾還是會出現莫名的崩潰,導致hbase:meta報告兩個不同的region卻有相同的或者重合的start key和end key。還有一種情況是運維人員或者某些工具軟件跳過HBase直接操作HBase保存在HDFS上的文件或者目錄,導致HBase的數據和元數據不匹配。還有一種典型的場景是在HBase 2.0上使用了hbase hbck進行強行修復,這也可能導致region overlap問題。在HBase 2.0之前,hbck提供了修復overlap的功能,但是在HBase 2.0之后,由于采用了新的分布式事務框架Procedure V2(HBASE-12439),原有的修復邏輯不能使用,而符合Procedure V2的修復功能目前還沒有完成,所以強行使用hbck修復,結果是不可預期的[4]。

3 HBase Region Overlap修復方法

可以通過region的合并功能將有overlap問題的相鄰的兩個region進行合并,產生一個較大的region,這個region包含了原有的兩個region的所有數據。

當只有少數的region overlap時,可以通過hbase shell進行手工合并,但是實際上由于硬件故障、操作系統故障、不小心的底層操作(比如直接操作HDFS文件)等原因,可能會出現大量的region overlap,這時候采用手工合并將耗費大量時間而且容易出錯,所以需要基于這一思路采用編程的方式自動地實現這一合并過程。

3.1 重現問題

為了方便測試,首先需要一個能夠比較快速重現region over問題的方式,這個可以通過shell腳本來實現。

空表的重現步驟是:

(1)創建一個預分區的表,比如create 't1','cf1', { NUMREGIONS => 100, SPLITALGO => 'HexStringSplit' },這會在HDFS上建立對應的目錄結構。

(2)在HDFS上建立一個臨時目錄,然后把上述步驟建立的HBase表在HDFS上的全部內容移動到這個臨時目錄。

(3)Disable刪除剛剛創建的HBase表,然后以同樣的名字創建預分區表,但是分區的數量與第一次不同,比如create 't3','cf1', { NUMREGIONS => 70, SPLITALGO => 'HexStringSplit' }

(4)把之前臨時目錄的內容移動到新建表的目錄下。

(5)運行hbase hbck,會報告有region目錄信息存在于HDFS,但是沒有存在于hbase:meta,這是預期的結果。

(6)通過hbck2 的addFsRegionsMissingInMeta功能將HDFS上的region信息寫入hbase:meta。

(7)再次運行hbase hbck,會報告大量的region overlap問題。

進一步測試需要有大量數據的場景,重現步驟跟無數據的過程類似,只是建表的語句用hbase ltt -write代替,比如hbase ltt -write 30:20:10 -num_keys 10000 -num_regions_per_server 3建表后會在每個RegionServer上創建3個分區,然后用10個線程寫入10000條記錄,每條記錄30列,每個cell的大小是20個字節,這樣的場景更接近于真實環境。

3.2 編碼實現查錯

region的信息保存在hbase:meta表中,可以通過org.apache.hadoop.hbase.client.Admin接口的getRegions獲得一個列表,這個列表是按rowkey字典順序排序的,通過兩兩比較相鄰的region的start和end來判斷是否發生了overlap。

假設相鄰的region的rowkey范圍分別是[startKey1,endKey1)和[startKey2,endKey2),則有如下幾種overlap的情況:RegionInfo>> regionInfos。

3.3 編碼實現修復

總的思路是將查找到的有問題的每對region進行合并。兩個region合并會產生第三個region,同時原有的兩個region會被下線并從hbase:meta中刪除,然后將新生成的region上線,整個過程是個異步過程,所以發出合并指令到最終完成需要一定的時間,這期間新的region即使和后面的region還是有overlap,也不能進行合并,強行進行合并會導致報錯,所以需要加以判斷,這個判斷可以通過查詢hbase:meta表獲得必要的信息,通過查詢列簇HConstants.CATALOG_FAMILY里名為“merge”的一列可以獲得必要的數據。具體實現可以參考hbase-operator-tools的子項目Apache HBase HBCK2 Tool中的HBCKMetaTableAccessor代碼[5]。

當HBase在拆分或者合并的時候,為了確保數據不丟失,都會保留原來的region,在拆分或者合并過程結束后再等待目錄管理器來清理這些舊的region信息。在反復合并的過程中較短時間內會有大量的舊的region信息,需要開啟HBase的臨時開啟CatalogJanitor功能,可以考慮先記錄目前系統內的CatalogJanitor功能的狀態,在修復完成后恢復這個狀態。

4 結語

HBase是目前大數據技術棧的主要組件,主要承擔數據的隨機讀寫任務。HBase region是HBase用來實現負載均衡和可擴展性的重要概念。在HBase運行過程中,HBase 會自動執行region分裂、合并、上下線等操作,或者HBase的運維人員也會手動地進行這些操作。在操作的過程中,由于軟硬件的故障,會導致region的rowkey的排布出現互相重疊的問題,導致讀寫HBase數據出現問題,這就是HBase Region Overlap問題。本文分析了產生問題的原因,并描述了重現問題、檢測問題和解決問題的邏輯,對于保證HBase長期穩定的運行有比較大的幫助。未來會進一步完善處理邏輯,將其作為一個組件加入hbase hbck2 tools中。

猜你喜歡
故障
故障一點通
奔馳R320車ABS、ESP故障燈異常點亮
WKT型可控停車器及其故障處理
基于OpenMP的電力系統并行故障計算實現
電測與儀表(2016年5期)2016-04-22 01:13:50
故障一點通
故障一點通
故障一點通
故障一點通
故障一點通
江淮車故障3例
主站蜘蛛池模板: 久久青草精品一区二区三区| 99在线视频免费| 亚洲精品欧美日韩在线| 热思思久久免费视频| 日本一区二区三区精品国产| 久青草免费在线视频| 亚洲无线国产观看| 亚洲人免费视频| 午夜高清国产拍精品| 国产成人91精品| 国产成人精品综合| AV老司机AV天堂| 免费无码又爽又黄又刺激网站 | 欧美成人精品在线| 久久久久国产精品熟女影院| 日韩在线观看网站| 国产成人乱无码视频| 国产高颜值露脸在线观看| 欧美精品成人一区二区视频一| 国产又爽又黄无遮挡免费观看| 国产精品真实对白精彩久久| 国产精品天干天干在线观看| 日本一区二区三区精品视频| 精品视频一区在线观看| 欧美日韩成人| 免费一看一级毛片| 亚洲成人动漫在线观看| 国产在线观看人成激情视频| 欧美成人怡春院在线激情| 亚洲精品天堂在线观看| 亚洲欧洲美色一区二区三区| 久青草国产高清在线视频| 久久综合亚洲鲁鲁九月天| 欧美www在线观看| 亚洲人成网7777777国产| 亚洲综合色区在线播放2019| 日本免费a视频| 九一九色国产| 欧美激情,国产精品| 久久久噜噜噜| 香蕉eeww99国产在线观看| 2020国产免费久久精品99| 日本高清在线看免费观看| 成人国产小视频| 免费无码AV片在线观看国产| 色窝窝免费一区二区三区| 免费毛片在线| 黑色丝袜高跟国产在线91| 2021国产精品自产拍在线观看| 久久久久国产一级毛片高清板| 在线亚洲精品自拍| 麻豆精品久久久久久久99蜜桃| 四虎成人免费毛片| 国产福利一区二区在线观看| 免费高清a毛片| 国产白浆一区二区三区视频在线| 婷婷午夜影院| 国产白浆一区二区三区视频在线 | 日韩资源站| 日韩美女福利视频| 亚洲无码视频喷水| 国产精品免费福利久久播放| 亚瑟天堂久久一区二区影院| 亚洲男人在线天堂| 热re99久久精品国99热| 国内精品小视频福利网址| 国产精品专区第一页在线观看| 久久综合久久鬼| 自偷自拍三级全三级视频| 国产精品主播| 欧美精品1区| 欧美日韩国产在线人成app| 一级高清毛片免费a级高清毛片| 在线播放真实国产乱子伦| 日本成人福利视频| 乱色熟女综合一区二区| 青青青国产视频手机| 国产小视频a在线观看| 91丝袜美腿高跟国产极品老师| 欧美日韩国产在线观看一区二区三区| 国产欧美在线观看视频| 在线免费亚洲无码视频|