一、预分区的设计
hbase默认建表时有一个region,该region没有startkey和endkey,在向该表中写数据时都会写入到唯一的一个region中
随着数据量的增加,此region中某个store下的storeFile文件的大小达到一定阈值(动态阈值)会进行split分割,一分为二
在此过程中,会产生两个问题需要解决:
1、在region进行split分割前会产生热点问题
同一时间可能整个hbase集群只有一个或几个regionserver在响应客户的读写请求
2、region在被动执行split时会offline,另外会消耗大量的集群资源,导致整个hbase集群访问不稳定
如何解决:
提前对hbase表的region指定个数,并且指定每个region的rowkey范围,降低被动split分割的几率---预分区
建表时创建预分区的方式
方式1:
>create 't001', 'f1', SPLITS => ['10', '20', '30', '40']
创建出的region会被master随机分散在regionserver上
startkey endkey
region1 10
region2 10 20
region3 20 30
region4 30 40
region5 40
插入数据,使用不同的rowkey:
> put 't200','33','f1:name','tom' --
region的startkey和endkey的范围是对插入数据时的