HBase——关于Region
RegionRegion是HBase数据管理的基本呢单位。数据的move,数据的balance,数据的split,都是按照region来进行操作的。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。寻址过程数据寻址的一般过程如下,请参照:zookeeper
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之类的生成,这样才会数据分布均衡。
更多推荐
所有评论(0)