HBase调优:预分区与行键设计

HBase调优:预分区与行键设计,第1张

基于此我们可以控制在建表的时候,创建多个空region,并确定每个region的起始和终止rowkey,这样只要我们的rowkey设计能均匀的命中各个region,就不会存在写热点问题。自然split的几率也会大大降低。当然随着数据量的不断增长,该split的还是要进行split。像这样预先创建hbase表分区的方式,称之为预分区。

hash(主键) + 年月日时(2019062315)

这里只取hash(主键)的前6位,使得行键的长度正好是16,也就是8的整数倍,在64位计算机中,效果最好。

列族固定,只有一个,设为f,标签为分钟加上秒数:

分秒(5623)

如果需要精确到毫秒,可以为列族f设置有多个版本或者将标签设计为分秒毫秒(5623142)或者分秒.版本号(5623.1)

一个regionserver可以管理的region数量和列族数量与每个列族缓存的大小有关,计算公式如下:

我这里只分了三个region,用hbase shell命令创建表,设置预分区数量为3

下图中,可以看到,预分区以后,数据的读写访问请求数量均匀分布在3台RegionServer上,避免了热点问题。

你要考虑几个点。

1 Region 压力

2 Region 分区

首先 自增来做不是不可以。 但是有很大的局限性。 比如你用自增做主键了。 那么你的 Region 几乎都在一台机器上, 发挥不出集群的性能, 这样的设计将导致效率低下。

如果你这样做了, 那么挽救办法就是 Region 分区。 假设你分区 以数字分区。 那么可以打散Region的分类。 那么第二个问题:

此时, 你的HBase 不是只为这一个 自增而做的。 那么你提前做好的时间分区将会导致其他的非时间rowkey 集中。 且业务数据量需要考虑。

方法如下:

1、rowkey是行的主键,Hbase支持3种检索方式,通过单个Rowkey访问,按照某个Rowkey键值进行get *** 作,获取唯一一条记录。

2、通过Rowkey的range进行scan,通过设置startRowKey和endRowKey,在这个范围内进行扫描。按指定的条件获取一批记录。

3、全表扫描,直接扫描整张表中所有行记录。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/tougao/11318733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存