HBase超詳細版本教學六

Hbase—RegionSplit

在這裏插入圖片描述


Region分裂策略


我們剛建立表的時候只有一個Region,隨着我們表中的數據量不斷的增長,我們的Region會逐漸的分裂,相當於一個Region,變成了兩個Region,之前的Region就沒了,那麼,這個Region什麼時候進行分裂呢?


Region分裂過程


Region分裂完畢之後,儘可能的會讓兩個Region分裂的數據相同,這裏提一個詞彙預分區,它也會Split,分裂的細節只這樣的,它生成兩個新的Region,那麼相當於在HDFS上相當於有什麼呢?是不是會有兩個新的路徑?每一個Region在HDFS上體現出來的是一個路徑,Region下面是有Store的,Store下面會有StoreFile的,那麼我一個Region生成兩個新的Region肯定是生成兩個新的路徑,將之前的數據,分成兩半。

在這裏插入圖片描述

那麼我在生成新路徑的時候,是不是需要的時間會比較久呢?因爲畢竟涉及到了數據的移動了,它不是直接將數據分開,放到新的路徑,不是這樣的。它分裂的時候確實會有新的路徑產生,這兩個路徑下面並沒有真的存我們的數據,它在兩個新的路徑下,相當於會有兩個引用文件,它引用了老Region中,屬於它的那部分數據,我們第一個分的時候,肯定是從其實RowKey,到中間的那個RowKey,從中間的RowKey到最後的RowKey是屬於第二個Region,那麼這個引用文件存儲的相當於RowKey範圍,有了這兩個引用文件之後,我們這時候的兩個Region就已經存放在我們的meta表中了。

在這裏插入圖片描述

然後我們的老Region就已經沒有了,但是老Region中的文件還是在的,這個數據還在,這時候,來新的讀寫請求會怎麼辦呢?好比說,來讀請求,老的Region已經沒有了,那麼我們肯定會請求新的Region。

在這裏插入圖片描述

那麼新Region下是沒有數據的,只有引用文件,引用文件中存儲的都是RowKey範圍,那麼,它會根據這個RowKey範圍去原來的老Region中,拿它對應的數據。這個時候我們的老的Region中的文件數據是在的還沒有刪除。

那麼寫請求,我們也會往新的Region中去寫,寫的話,我們就不會往老的Region中去寫了,會在新的Region中去寫。Flush的時候,也會在新的Region下進行Flush,生成新文件。不會去老Region.

在這裏插入圖片描述
那麼問題來了,我們的老Region中的文件,什麼時候會刪除呢?我們的新Region也會不斷的Flush生成新的文件,那麼我們Flush之後是不是也要進行合併呢,當我們的新的Region下的文件,進行Major Compaction大合併的時候,這個時候,我們纔會去老的Region中將對應的數據拿過來一起合併,進行統一的排序,該刪除的進行刪除,兩個新的Region全部Major Compaction完畢之後,老Region數據全部得到轉移,轉移到了新的Region,這樣老的Region纔會被刪除掉。


Region分裂時機

手撕官網,官網怎麼看,直接Document點開

在這裏插入圖片描述
然後看版本,沒有2.0,我們直接看2.1都一樣

在這裏插入圖片描述

咱麼直接點擊Ref,也可以下載PDF的都可以,直接來到下面這個界面。這個就是HBase的參考指南。

在這裏插入圖片描述

我們直接搜索一下Split Policy分裂策略。

在這裏插入圖片描述

看了官網發現有6,7個,我們怎麼配置呢?我們看到一個參數。

在這裏插入圖片描述

我們如果想用哪種分裂策略,我們直接可以將這個參數配置成全類名就可以了。標記紅的都是分裂策略。

在這裏插入圖片描述

2.x版本的默認值是這個

在這裏插入圖片描述

這種配置,直接配置在HBase的xml文件中即可。

Split流程小結

預分區也會split。
在Region中找到一個合適的split point,在這個split point上將該Region的數據劃分爲兩個新的Region。

Split發生時,新創建的子Region不會立即將所有數據重新寫入新文件,而是會創建引用文件,指向老Region中的數據。
meta表中保存新Region,刪除老Region。

讀數據時會去老Region中讀,但是寫數據會寫在新Region中。
在major compaction時,會將老Region的數據移動到新Region,刪除老Region。
Master默認5分鐘自動負載均衡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章