Hbase设计原则

Hbase存储架构

Hbase通过元数据信息来管理,数据都是通过ReginServer存储在HDFS上

Hbase是列式存储,以rowkey做唯一标识,Rowkey 是一个二进制码流,rowkey里面有多个列族(info,job),一个列族有多个列(sex和name),列下面包含对应的数据(famale,nick)

Hbase设计原则_第1张图片
Hbase架构

Rowkey设计原则

rowkey作为hbase里的唯一标识,且是自动排序的,按照abc的顺序排序.Hbase有三种查询方式  通过get方式,指定rowkey获取唯一一条记录  通过scan方式,设置startRow和stopRow参数进行范围匹配   通过全表扫描,即直接扫描整张表中所有行记录

1. rowkey的长度设计原则

rowkey的大小网上大都是说10-100个字节, 在我看来,在唯一标识和可读性识别性的前提下,rowkey越小越好!

2. rowkey散列原则

rowkey要散列是因为它要放到分区里面,假如rowkey不够散列,那很有可能集中到一个分区,导致数据倾斜.降低查询效率

3. rowkey唯一原则

保证其唯一性,可以的话,保证它的可读性,有意性

4. 时间戳rowkey设计

有些事务数据是带时间属性的,那样建议把时间戳放到rowkey中,那样利于检索,提高效率,可以用hash,亦或来打散


Hbase预分区

在建表的时候,要清楚数据的key是怎么分布的,然后再对Hbase的region预分区,也就是多建几个表,这就是Hbase的预分区.rowkey的预分区可以防止rowkey设计不合理的数据插入,可以缓解数据的热写,热写就是数据集中写到一台或者多台机器上,从而提高数据插入的效率


Hbase的读写流程

Hbase读流程

HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着。

接着Client通过刚才获取到的HRegionServer的IP来访问Meta表所在的HRegionServer,从而读取到Meta,进而获取到Meta表中存放的元数据。Client通过元数据中存储的信息,访问对应的HRegionServer,然后扫描所在HRegionServer的Memstore和Storefile来查询数据。最后HRegionServer把查询到的数据响应给Client。

Hbase写流程

Client也是先访问zookeeper,找到Meta表,并获取Meta表元数据。

确定当前将要写入的数据所对应的HRegion和HRegionServer服务器。

Client向该HRegionServer服务器发起写入数据请求,然后HRegionServer收到请求并响应。

Client先把数据写入到HLog,以防止数据丢失。

然后将数据写入到Memstore。

如果HLog和Memstore均写入成功,则这条数据写入成功

如果Memstore达到阈值,会把Memstore中的数据flush到Storefile中。

当Storefile越来越多,会触发Compact合并操作,把过多的Storefile合并成一个大的Storefile。

当Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,将Region一分为二。

你可能感兴趣的:(Hbase设计原则)