Hbase预分区

mac2024-01-24  40

在创建表的时候指定分区的分割点。。

一、命令行形式

1、hbase shell命令行里创建表是使用SPLITS指定一个数组,在数组中指定切割点。

hbase会自动以数据的元素为分割点(分割前会先排序,避免手滑导致顺序颠倒,然后出现分区的startKey大于endKey的情况)。下面数据有四个元素,则会分割出五个region。

create 'staff1','info1','porartition1',SPILTS=>['1000','2000','3000','4000']

分割后的情况如图:

2、把切割点放在本地文件中,然后创建表时指定文件路径。

文件内容:

命令:

create 'staff3','info','partition3',SPLITS_FILE=>'/root/splits.txt'

效果:

有没有发现,文件中的dd与cc顺序颠倒,但分区还是按字典序来?证明了hbase会先排序。

 

3、以十六进制分割,这个用的很少。。

create 'staff2','info','partition2',{NUMREGIONS=>15,SPLITALGO=>'HexStringSplit'}

效果:

 

二、java api形式:

就这三种。。

第一行的不会预分区。

第二行就是命令行的指定数组形式。

第三行是指定startKey和endKey,再指定想要分成N个分区。。。。hbase会在startKey和endKey之间自动帮你计算然后分出N个分区

 

三、合理分区评估:

1、根据服务器数量:

一张表 在一个服务器上最好保持在2~3个region,有3台服务器,那么这张表的region总数保持在6~9个最好。

2、根据将来半年内到一年内的数据量:

一个region数据量不超过10G,避免到达hbase的阈值而自动分区。。。也就是说,如果预估半年到一年这张表的数量会达到100G,那么100/10=10,就需要分10个以上的region。

 

四、当数据量增长速度不符合预估怎么办,数量比预估多。。。

1、新建一张表,把旧表数据导入到新表。

2、可以使用java api专门指定分割点。

 

 

最新回复(0)