在大量客户端请求访问数据或者写入数据的时候,只有少数几个或者一个 RegionServer 做出响应,导致该服务器的负载过高,造成读写效率低下,而此时其他的服务器还是处于空闲的状态,就是所谓“旱的旱死,涝的涝死”。那么为什么会造成这种情况,主要的原因就是数据分布不均匀,可能是数据量分布不均匀,也可能是冷热数据分布不均匀。而糟糕的 RowKey 设计就是发生热点即数据倾斜的源头,所以这里会详细说说HBase如何处理热点数据问题。
加盐
加盐即在原本的 rowkey 前面加上随机的一些值。 * 随机数:在 RowKey 的前面增加随机数来打散 RowKey 在 Region 的分布,但不是一种好的选择,因为 HBase 的设计是只有 RowKey 是索引,RowKey 都变成随机的了,读数据只能做性能极低的全表扫描了。总之不推荐。 * 哈希:哈希的方式明显比随机数更好,哈希会使同一行永远用一个前缀加盐。同样可以起到打散 Rowkey 在 Region 的分布的目的,使负载分散到整个集群,最重要读是可以预测的。使用确定的哈希可以让客户端重构完整的 Rowkey,可以使用 Get 操作准确获取某一个行数据。
反转
* 反转即把低位的随机数反转到高位。比如手机号码或者时间戳的反转,高位基本固定是 1 开头的,而末位是随机的。这种同样是一种比较常规的构成散列的方式。
预分区
预分区上面已经提到过,这种方式对于处理数据量分布不均匀,和冷热数据分布不均匀都是有一定效果的,但是需要对业务的应用场景做好准确的预判。
更多关于大数据培训的问题,欢迎咨询千锋教育在线名师,如果想要了解我们的师资、课程、项目实操的话可以点击咨询课程顾问,获取试听资格来试听我们的课程,在线零距离接触千锋教育大咖名师,让你轻松从入门到精通。