rowkey合理设计十分重要,设计原则如下:
一,保证唯一
rowkey唯一标识一行记录。
二,尽量短
数据的持久化文件HFile中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,100亿行数据,光rowkey就要占用将近1TB数据,这样会极大影响HFile的存储效率;
MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。
三,尽量散列
rowkey的高位应为散列字段,提高数据均衡分布在每个RegionServer,以实现负载均衡,反之则会导致读/写热点。
如果设计不合理将会出现各种各样的问题,例如:
Case1:
有项目现场遇到hbase集群中有个别rs节点的cpu高达2000%-5000%,居高不下,导致流数据产生积压及任务失败等问题。
问题分析:
查看60010界面,有数据倾斜,其中slave1、slave8节点请求数较其他节点明显过多,产生数据读写热点问题,具体如截图
尝试方法,将该slave1中的region move到其他节点,情况稍有缓解,但不明显。
最终解决方案:
rowkey合理设计十分重要,设计原则如下:
一,保证唯一
rowkey唯一标识一行记录。
二,尽量短
数据的持久化文件HFile中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,100亿行数据,光rowkey就要占用将近1TB数据,这样会极大影响HFile的存储效率;
MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。
三,尽量散列
rowkey的高位应为散列字段,提高数据均衡分布在每个RegionServer,以实现负载均衡,反之则会导致读/写热点。
如果设计不合理将会出现各种各样的问题,例如:
Case1:
有项目现场遇到hbase集群中有个别rs节点的cpu高达2000%-5000%,居高不下,导致流数据产生积压及任务失败等问题。
问题分析:
查看60010界面,有数据倾斜,其中slave1、slave8节点请求数较其他节点明显过多,产生数据读写热点问题,具体如截图
尝试方法,将该slave1中的region move到其他节点,情况稍有缓解,但不明显。
最终解决方案: