HBase——關於Region

Region

Region是HBase數據管理的基本呢單位。數據的move,數據的balance,數據的split,都是按照region來進行操作的。

region中存儲這用戶的真實數據,而爲了管理這些數據,HBase使用了RegionSever來管理region。


尋址過程

數據尋址的一般過程如下,請參照:

        zookeeper                hbase:meta table                   table
        +--------+               +--------------+               +--------------+
        |        |  ---------->  |              | ---+          |              |
        +--------+               +--------------+    |          +--------------+
        hbase:meta               |              |    |          |              |
        location                 +--------------+    |          +--------------+
                                 |              |    +----->    |     row      |
                                 +--------------+               +--------------+
                                 row per table region           |              |
                                                                +--------------+
                                                                |              |
                                                                +--------------+
                                                                |              |
                                                                +--------------+

1. zookeeper node節點上作爲master管理着hbase:meta 的location

2. 客戶端通過zookeeper獲得region server的地址

3. region的信息獲取後,數據的信息亦可獲取

4. 客戶端返回查詢結果


region name

HBase的region name是由以下三部分做成:

userTableName + , + startKey + , + regionID

而regionID是由apache.org隨機生成的,具體是timestamp.+MD5

比如:

test1,r6786520,1456410376247.fc9bdcb4f88aec2e64b393fece99cf0e.

test1: table name

r6786520: startKey

1456410376247.fc9bdcb4f88aec2e64b393fece99cf0e: regionID

1456410376247:timestamp型轉成long的數值型

fc9bdcb4f88aec2e64b393fece99cf0e: md5加密算法生成的ID


Region數

一般,region數如果沒有事前使用hbase shell來明示定義的話,算上系統的region數,一般只有3個:

1. hbase:meta

2. hbase:namespace

3. userRegion

因爲默認的region大小是10G,一般小型的環境下,數據量很難快速達到數據分裂的閾值。

明示的去指定的話,region數可以根據自己業務增加的趨勢實現選定一個峯值,這樣在加上設計一個優秀的rowkey,數據分佈比較均衡,整個集羣的性能纔是最優的。

疑惑:

1.在事前指定region數的情況下,region分割點選取的startkey是根據什麼選擇的,這個不明白。實際測試時發現,當region數指定爲5時,startkey~endkey的分佈如下所示:

region1:-#INF~33333333

region2:33333333~66666666

region3:66666666~99999999

region4:99999999~cccccccc

region5:cccccccc~+#INF


rowkey

hbase的數據分佈以及數據的操作,都是根據rowkey來劃分的,如果rowkey設計不合理的,到時候數據會分佈在一個region上,導致負載不均衡,IO請求加劇,用戶的體驗感瞬間下降,延遲增大。所以,一般rowkey不建議使用timestamp,字母等其他的混合,最好採用散列hase,使用MD5之類的生成,這樣纔會數據分佈均衡。




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