HBase常见热点问题(核心)

Hbase热点问题

Hbase 热点问题?

 HBase常见热点问题(核心)

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

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

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

例如:

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

 HBase常见热点问题(核心)

就出现了热点的问题

什么是热点

 HBase常见热点问题(核心)

产生原因

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

 HBase常见热点问题(核心)

 

2、Rowkey设计不合理

 HBase常见热点问题(核心)

 

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

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

解决方案

hbase 创建表时指定分区

Hbase预分区
Shell createTable并预分区

 HBase常见热点问题(核心)

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

 HBase常见热点问题(核心)

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

 HBase常见热点问题(核心)

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

 HBase常见热点问题(核心)

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

 HBase常见热点问题(核心)

合理设计rowkey

Rowkey 长度原则

 HBase常见热点问题(核心)

Rowkey 散列原则

注意:rowkey低位和高位

 HBase常见热点问题(核心)

Rowkey唯一原则

 HBase常见热点问题(核心)

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

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

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

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

加盐

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

 HBase常见热点问题(核心)


HBase常见热点问题(核心) 

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

 HBase常见热点问题(核心)

HBase常见热点问题(核心)哈希

 HBase常见热点问题(核心)

反转

 HBase常见热点问题(核心)

举例:

 HBase常见热点问题(核心)

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

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

时间戳反转

 HBase常见热点问题(核心)

HBASE总结

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

 HBase常见热点问题(核心)

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

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