1、regionserver请求不均匀
1)节点上的regions的个数是否基本一致,如果不一致做balance。
#开启balancer(hbase-0.94) hbase shell > balance_switch true #关闭 > balance_switch false
2)如果region一致的情况下,请求量仍然差异很大,这时候需要排查rowkey的设计和分布。
下面这些节点在regions数量基本一致的情况下,request差异很大。
hbase UI:http://192.168.8.8:60010/master-status
2、rowkey hotspotting问题
hbase cf:column的存储按照rowkey的字母表顺序存储,rowkry前缀相同或者相近的行更容易写入到同一个region中,出现热点region,比如日志数据以timestampe开头。
处理方法:
1)逆序存储rowkey,把无序的rowkey部分放到前面。
2)rowkey前面加入随机数字
3)加盐处理(salt)
负面影响:
1) 客户端数据读取更复杂,更多的逻辑代码,甚至影响性能。
2)scan查询不能正常使用。
3、对rowkey加盐(slat)
private long DEKHash(String str) { long hash = str.length(); for(int i = 0; i < str.length(); i++) { hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i); } return hash; }
加盐后的效果,已经均匀了很多。