hbase热点

Hbase热点问题

Hbase 热点问题?

 

当我们没有提前创建分区的时候,只有一个region,默认rowkey是递增的

往大的region写数据,无法发挥集群写的优点,那之前的region有的未达到饱和状态,

就浪费了。数据分布不均。

例如:

Keys:[2-4]一直往rs1写数据,没有向其他的rs写,就会出现热点问题

 

就出现了热点的问题

什么是热点

 

产生原因

1、没有提前创建分区,Hbase 创建表默认只有一个分区

 

2、Rowkey设计不合理

 

只有一个regionserver,然后所有的rowkey都往该region里面写数据。最后regionserver就会承受不了压力。

就会出现单点故障,热点问题。

解决方案

hbase 创建表时指定分区

Hbase预分区

Shell createTable并预分区

 

JavaAPI createTable并预分区--直接根据描述创建表

 

JavaAPI createTable并预分区--根据描述和region个数以及startkey,endkey自动分配

 

JavaAPI createTable并预分区--根据表的描述和自定义的分区设置创建表(同步)

 

JavaAPI createTable并预分区--根据表的描述和自定义的分区设置创建表(异步)

 

合理设计rowkey

Rowkey 长度原则

 

Rowkey 散列原则

注意:rowkey低位和高位

 

Rowkey唯一原则

 

Rowkey 按照字典排序,可以提高查询的效率。

同一个用户:将最近可能访问的数据放到一块,可以提高数据查询的效率

不同的用户:将数据放在不同的regionserver上,以至负载均衡。

Hbase常见避免热点问题的方法(*****)

加盐

一把rowkey前缀,决定了在哪一个分区。

 

降低热点问题,但是会造成读的时候,效率下降。

 

哈希

 

反转

 

举例:

 

前缀都是一样,可能都会往一个region里面写数据时,就会出现热点问题。

返回来,把号码倒过来,就会是不同的数字,解决了热点问题。 

时间戳反转

 

HBASE总结

1、尽量减少行和列的大小

 

2、列簇尽可能越短越好,最好是一个字符

3、冗长的属性名虽然可读性好,但是更短的属性存储在HBase中会更好

猜你喜欢

转载自blog.csdn.net/qq_33283716/article/details/83306985