hbase學習筆記 regiion拆分 合併

2021-10-04 02:17:28 字數 2876 閱讀 7739

region中儲存的是大量的rowkey資料 ,當region中的資料條數過多的時候,直接影響查詢效率.當region過大的時候.hbase會拆分region , 這也是hbase的乙個優點 .

hbase的region split策略一共有以下幾種:

當region大小大於某個閾值(hbase.hregion.max.filesize=10g)之後就會觸發切分,乙個region等分為2個region。

但是在生產線上這種切分策略卻有相當大的弊端:切分策略對於大表和小表沒有明顯的區分。閾值(hbase.hregion.max.filesize)設定較大對大表比較友好,但是小表就有可能不會觸發**,極端情況下可能就1個,這對業務來說並不是什麼好事。如果設定較小則對小表友好,但乙個大表就會在整個集群產生大量的region,這對於集群的管理、資源使用、failover來說都不是一件好事。

2、increasingtoupperboundregionsplitpolicy

切分策略稍微有點複雜,總體看和constantsizeregionsplitpolicy思路相同,乙個region大小大於設定閾值就會觸發切分。但是這個閾值並不像constantsizeregionsplitpolicy是乙個固定的值,而是會在一定條件下不斷調整,調整規則和region所屬表在當前regionserver上的region個數有關係.

region split的計算公式是:

regioncount^3 * 128m * 2,當region達到該size的時候進行split

例如:第一次split:1^3 * 256 = 256mb

第二次split:2^3 * 256 = 2048mb

第三次split:3^3 * 256 = 6912mb

第四次split:4^3 * 256 = 16384mb > 10gb,因此取較小的值10gb

後面每次split的size都是10gb了

3、steppingsplitpolicy

這種切分策略的切分閾值又發生了變化,相比 increasingtoupperboundregionsplitpolicy 簡單了一些,依然和待**region所屬表在當前regionserver上的region個數有關係,如果region個數等於1,

切分閾值為flush size * 2,否則為maxregionfilesize。這種切分策略對於大集群中的大表、小表會比 increasingtoupperboundregionsplitpolicy 更加友好,小表不會再產生大量的小region,而是適可而止。

4、keyprefixregionsplitpolicy

根據rowkey的字首對資料進行分組,這裡是指定rowkey的前多少位作為字首,比如rowkey都是16位的,指定前5位是字首,那麼前5位相同的rowkey在進行region split的時候會分到相同的region中。

5、delimitedkeyprefixregionsplitpolicy

保證相同字首的資料在同乙個region中,例如rowkey的格式為:userid_eventtype_eventid,指定的delimiter為 _ ,則split的的時候會確保userid相同的資料在同乙個region中。

6、disabledregionsplitpolicy

region合併

1 region合併說明

region的合併不是為了效能,  而是出於維護的目的 .

比如刪除了大量的資料 ,這個時候每個region都變得很小 ,儲存多個region就浪費了 ,這個時候可以把region合併起來,然後可以減少一些region伺服器節點

2 如何進行region合併

2.1 通過merge類冷合併region

需求:需要把test表中的2個region資料進行合併:

test,,1565940912661.62d28d7d20f18debd2e7dac093bc09d8.

test,1000,1565940912661.5b6f9e8dad3880bcc825826d12e81436.

這裡通過org.apache.hadoop.hbase.util.merge類來實現,

不需要進入hbase shell,直接執行(需要先關閉hbase集群):

hbase org.apache.hadoop.hbase.util.merge test test,,1565940912661.62d28d7d20f18debd2e7dac093bc09d8. test,1000,1565940912661.5b6f9e8dad3880bcc825826d12e81436.

2.2 通過online_merge熱合併region

與冷合併不同的是,online_merge的傳參是region的hash值,而region的hash值就是region名稱的最後那段在兩個.之間的字串部分。

需求:需要把test表中的2個region資料進行合併:

test,2000,1565940912661.c2212a3956b814a6f0d57a90983a8515.

test,3000,1565940912661.553dd4db667814cf2f050561167ca030.

需要進入hbase shell:

merge_region 'c2212a3956b814a6f0d57a90983a8515','553dd4db667814cf2f050561167ca030'

Hbase 學習筆記 Hbase 概覽

hbase構建在 hdfs 之上,hbase內部管理的檔案全部儲存在hdfs 中 行鍵,table的主鍵,table中的記錄按照row key排序。型別為byte array 列簇,table在水平方向有乙個或者多個column family組成,乙個column family中可以由任意多個col...

Hbase學習筆記

1.table中行是按照row key的字典序排列的 2.在行的方向上分隔為多個region 3.hregion是hbase 中分布式儲存和負載均衡的最小單位,這表示不同的region可以分布在不同的regionserver上 當乙個region足夠大時,現在是256m 就會split,乙個regi...

HBase學習筆記

hbase簡介 1 hbase定義 hbase是一種分布式 面向列的開源資料庫。具有良好的擴充套件性 低寫入 查詢延遲的特點。2 hbase與傳統的關聯式資料庫的區別 hbase rdb 資料型別 簡單的,儲存為未經解釋的字串 豐富的資料型別和儲存方式 資料操作 只有簡單的插入 查詢 刪除和清空等 ...