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例
主站蜘蛛池模板: 国产乱肥老妇精品视频| 欧洲高清无码在线| 四虎成人在线视频| 日本在线视频免费| 98精品全国免费观看视频| 日本五区在线不卡精品| 国产91成人| 少妇极品熟妇人妻专区视频| 在线国产毛片| 伊大人香蕉久久网欧美| 欧美不卡视频一区发布| 青青操国产视频| 亚洲一区二区三区在线视频| 五月天久久综合国产一区二区| 伊人色在线视频| 午夜日韩久久影院| 亚洲人成网址| 免费看a级毛片| 欧美区一区| 日韩在线成年视频人网站观看| 日韩区欧美区| 国产午夜福利在线小视频| 国产91熟女高潮一区二区| 久久精品91麻豆| 亚洲精选无码久久久| 亚洲熟妇AV日韩熟妇在线| 91国语视频| 一本大道无码高清| 久久久久人妻一区精品色奶水| 免费中文字幕在在线不卡| 国内精自视频品线一二区| 四虎成人精品| 亚洲首页在线观看| 国产福利微拍精品一区二区| 免费A级毛片无码免费视频| 久久熟女AV| 91欧美亚洲国产五月天| 亚洲第一天堂无码专区| a毛片免费在线观看| 久久99精品久久久久纯品| 亚洲视频无码| 99久久性生片| 97久久免费视频| 亚洲欧洲日韩国产综合在线二区| 一级毛片免费高清视频| 亚洲AV成人一区二区三区AV| 国产成人凹凸视频在线| 在线视频亚洲欧美| 国产综合无码一区二区色蜜蜜| 为你提供最新久久精品久久综合| jizz国产在线| 国产精品欧美激情| 亚洲成aⅴ人在线观看| 亚洲国产欧美中日韩成人综合视频| 国内精自线i品一区202| AV在线天堂进入| 在线无码九区| 欧洲成人免费视频| 婷婷丁香色| 国产精品亚洲一区二区三区z| 色首页AV在线| 亚洲一区二区三区国产精华液| 国产国模一区二区三区四区| 四虎影视国产精品| 热re99久久精品国99热| 青草91视频免费观看| 亚洲视频黄| 欧美一级在线| 久久激情影院| 国产视频久久久久| 欧美在线中文字幕| 人人91人人澡人人妻人人爽| 国产精品99久久久久久董美香| 久久一本精品久久久ー99| 国产精品嫩草影院视频| 国产新AV天堂| 精品無碼一區在線觀看 | 凹凸精品免费精品视频| 国产av一码二码三码无码 | 99久久性生片| 亚洲成年人网| 亚洲视频无码|