rowkey设计的重要性以及设计原则

rowkey合理设计十分重要,设计原则如下:


一,保证唯一
rowkey唯一标识一行记录。

二,尽量短
数据的持久化文件HFile中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,100亿行数据,光rowkey就要占用将近1TB数据,这样会极大影响HFile的存储效率;
MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。


三,尽量散列
rowkey的高位应为散列字段,提高数据均衡分布在每个RegionServer,以实现负载均衡,反之则会导致读/写热点。

如果设计不合理将会出现各种各样的问题,例如:

Case1:

有项目现场遇到hbase集群中有个别rs节点的cpu高达2000%-5000%,居高不下,导致流数据产生积压及任务失败等问题。

问题分析

查看60010界面,有数据倾斜,其中slave1、slave8节点请求数较其他节点明显过多,产生数据读写热点问题,具体如截图

image.png


尝试方法,将该slave1中的region move到其他节点,情况稍有缓解,但不明显。


最终解决方案:

  1. 从业务角度,建议对rowkey进行散列设计(规则有很多,比如hash或者timestamp反转等)
  2. 建议对这张表进行重构,先评估数据量再预分合适region(splitkey选取规则要和产生散列rowkey的规则保持一致),再做插入。


评论
登录后可评论
发布者
星小环分享号
文章
187
问答
225
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入