- 根据RowKey的前缀对数据进行分组,这里是指定RowKey的前多少位作为前缀 , 比如RowKey都是16位的,指定前5位是前缀 。
- 那么前5位相同的RowKey在进行region split的时候会分到相同的Region中 。
- 保证相同前缀的数据在同一个Region中 , 例如RowKey的格式为:userid_eventtype_eventid,指定的delimiter为_ 。
- 则split的的时候会确保userid相同的数据在同一个Region中 。
不启用自动拆分,需要指定手动拆分 。预分区当一个table刚被创建的时候,HBase默认的分配一个Region给table 。
- 这时所有的读写请求都会访问到同一个RegionServer的同一个Region中 。
- 这个时候就达不到负载均衡的效果了,集群中的其他RegionServer就可能会处于比较空闲的状态 。
- 可以用预分区(pre-splitting) , 在创建table的时候就配置好,生成多个Region 。
- 每一个Region维护着startRow与endRowKey 。
- 如果加入的数据符合某个Region维护的RowKey范围 , 则该数据交给这个Region维护 。
create 'person','info1','info2',SPLITS => ['1000','2000','3000','4000']- 1.
region 定位基本步骤:
客户端与 ZooKeeper 交互 , 查找 hbase:meta 系统表所在的 Regionserver 。
hbase:meta 表维护了每个用户表中 rowkey 区间与 Region 存放位置的映射关系,具体如下:
- rowkey : table name , start key,region id 。
- value : RegionServer 对象(保存了 RegionServer 位置信息等) 。
客户端与 rowkey 所在的 RegionServer 交互,执行该 rowkey 相关操作 。
需要注意:
- 客户端首次执行读写操作时才需要定位 hbase:meta 表的位置 。
- 之后会将其缓存到本地,除非因 region 移动导致缓存失效 , 客户端才会重新读取 hbase:meta 表位置,并更新缓存 。

文章插图
读写流程读操作:
首先从 ZooKeeper 找到 meta 表的 region 位置 , 然后读取hbase:meta 表中的数据,hbase:meta 表中存储了用户表的 region 信息 。
根据要查询的 namespace 、表名和 rowkey 信息,找到写入数据对应的 Region 信息 。
找到这个 Region 对应的 RegionServer ,然后发送请求 。
查找对应的 Region 。
先从 MemStore 查找数据,如果没有,再从 BlockCache 上读取 。
- HBase 上 RegionServer 的内存分为两个部分:
- 一部分作为 MemStore,主要用来写 。
- 另外一部分作为 BlockCache,主要用于读数据 。
- 从 StoreFile 中读取到数据之后,不是直接把结果数据返回给客户端,而是把数据先写入到 BlockCache 中 , 目的是为了加快后续的查询,然后在返回结果给客户端 。

文章插图
推荐阅读
- steam怎么换区 steam两种转区方法介绍
- 郑梓妍扮演者是谁?郑梓妍扮演者钟晨瑶介绍
- 中秋节介绍 中秋节介绍英语作文
- 纸张种类 纸张种类大全介绍
- 水玻璃的特性及用途介绍 水玻璃的特性及用途
- 南京春节的风俗有哪些,南京人结婚风俗都有哪些介绍的详细些
- 电信星卡29元套餐介绍,电信星卡可以添加副卡
- 华为手表gt2功能介绍,华为手表gt2怎么设置
- 罗非鱼钓法介绍 罗非鱼如何钓
- Scylla数据库-高性能的分布式数据库
