预分区
- 默认建表
HBase默认建表有一个region,这个region的rowkey是没有边界的,即没有startkey和endkey。
在数据写入时,所有的数据都会写入这个默认的region,随着数据量的不断增加,会进行split,分成两个region。 - 产生的问题
数据往一个region上写,会有写热点问题。
region split会消耗宝贵的IO资源。 - 解决问题
在建表时,创建多个空的region,并确定每个regionde startkey和endkey,这样只要rowkey设计能均匀的命中各个region,就不会存在写热点问题。自然split的几率也会大大降低。
rowkey设计原则
- rowkey的长度越短越好
a、数据的持久化文件是HFile中是按照KeyValue存储的,如果rowkey过长会极大影响HFile的存储效率
b、MemStore将缓存部分数据在内存,如果rowkey字段过长,内存的利用率会降低,系统不能缓存更多的数据,这样会降低检索效率。 - rowkey尽量散列
建议将rowkey的高位作为散列字段,将提高数据均衡分布在每个RegionServer,以实现 - rowkey保证 唯一性