文章目錄
-
-
-
- 一、拆分與合并的目的
-
- 1.拆分
- 2.合并
- 二、Region拆分
-
- 1.自動拆分
- 2.手動拆分
-
- (1).Linux指令行建立
- (2).在HBase指令行裡建立
- (3).指定拆分檔案
- (4).強制拆分
- 三、Region合并
-
- 1.Minor Compaction
- 2.Major Compaction
- 3.三種觸發合并檢查的情況
- 4.合并操作
-
-
一、拆分與合并的目的
1.拆分
- 當一個Region大到一定程度,或導緻讀取效率太低,是以會進行分裂
- HBase可以通過Region Split達到負載均衡
- Region的拆分分為自動拆分與手動拆分
2.合并
- 當删除了大量的資料後,每一個Region都變小了,這時候再分多個Region就太浪費空間,可以将這些Region合并起來
- 合并的主要目的不是為了性能考慮,而是出于維護的目的
二、Region拆分
1.自動拆分
- 在0.94版本之前,使用的拆分政策是.ConstantSizeRegionSplitPolicy,按照固定大小來拆分Region,即當Region的大小超過預設值(通常預設值是10G),Region就會被HBase拆分成兩個Region,且是平均配置設定。
- 0.94版本之後,用到的拆分政策是 IncreasingToUpperBoundRegionSplitPolicy,即這種拆分方法是會随着Region個數變化而變化,比較靈活,具體的計算方法如下:
- tableRegionCounts:表在RegionServer上所有Region的總和
- initalSize:如果沒有重新定義hbase.increasing.policy.initial.size,它的大小就是Memstore的2倍,也就是128*2M
- defaultRegionMaxFileSize:Region的最大大小,預設是10G
通過計算可以得出,當Region的個數分别為1,2,3時,檔案大小的上限分别為256M,2G,6912M。當Region個數大于等于4個,檔案大小已經超出10G,是以上限隻能是10G
2.手動拆分
(1).Linux指令行建立
hbase org.apache.hadoop.hbase.util.RegionSplitter my_split_table2 HexStringSplit -c 5 -f mycf
org.apache.hadoop.hbase.util.RegionSplitter——調用的一個切分Region類
my_split_table2——表名
HexStringSplit——拆分點算法,這裡采用16進制
-c ——Region的個數
-f ——列族名
執行完成後可以進入HBase中檢視是否建立成功
然後登陸網頁能夠更直覺的看到自己切分的Region:localhost:60010——localhost要用自己的ip位址
(2).在HBase指令行裡建立
hbase(main):009:0> create 'split2','mycf2',SPLITS=>['aa','bb','cc','dd','ee','ff','zz']
0 row(s) in 2.2930 seconds
=> Hbase::Table - split2
同樣也可以登陸網頁檢視切分是否成功。
(3).指定拆分檔案
首先編輯一個拆分檔案student.txt,如下圖,每一行不能有重複
aa
bb
ff
ag
sd
dd
gg
~
在HBase指令行開始建立表:
hbase(main):012:0> create 'stu','info',SPLITS_FILE=>'/root/datas/student/student.txt'
0 row(s) in 2.2610 seconds
=> Hbase::Table - stu
hbase(main):013:0>
隻需要指定拆分檔案即可。
(4).強制拆分
以上三種拆分方式也叫做Region的預拆分。下面這種屬于對Region的強制拆分。
上圖是之前做的一個Region通過HBase指令行進行拆分
split2——表名
bb——起始key
1595513677802——終止key
c798b2717d6d7006bd67ad4e6197ed43——終止key的id
現在可以根據這個id在bb和cc之間在強制拆分一個Region
HBase指令行輸入指令:
hbase(main):014:0> split 'c798b2717d6d7006bd67ad4e6197ed43','c'
0 row(s) in 0.0450 seconds
就可以發現bb和ccRegion之間又強制被拆分一個Region
PS:因為Region的排序是按照字典順序排序的,是以在強制拆分的時候,要注意Region名的大小
三、Region合并
1.Minor Compaction
- 将一部分小檔案合并成更少的大型檔案,通過事件觸發,合并速度較快;合并的時候不會真正的删除,隻是打個标記
- hbase.hregion.memstore.flush.size 緩存門檻值大小 在hbase-site.xml檔案中可以設定,預設是128M
- hbase.hstore.compaction.max :每次compact的HFile的最大數目,預設是10
- hbase.hstore.compaction.kv.max:compact時批量讀取和寫入KeyValue資料的數量,預設是10
2.Major Compaction
- 将一個HStore中的所有檔案合并成一個檔案,通過時間觸發,合并速度慢,同時還會删除合并之前的小檔案,是以十分消耗性能,一般會将自動合并關掉。
- hbase.hregion.majorcompaction 時間間隔,預設是7天
3.三種觸發合并檢查的情況
- MemStore被刷寫到磁盤
- 執行shell指令compact,major_compaction或者調用相應API
- HBase背景線程周期性觸發檢查
4.合并操作
#compact一個表的所有regions
compact 't1'
#compact某個空閑的region
compact 'r1'
#compact一個region中的某個列族
compact 'r1', 'c1'
#compact一個表中的某個列族
compact 't1', 'c1'