最近使用HBase PE工具对HBase进行压测,RandomRead场景测试过程中,发现读请求分布非常不均匀,全部落在前几个region上。
百度发现很多小伙伴也遇到类似问题,建议使用--size代替--rows,经测试并不生效。
排查代码发现,get请求构造的时候是
random.nextInt(Integer.MAX_VALUE) % totalRows
可以看出 get请求收到 totalRows 的限制,而totalRows 就是--rows指定的数量。 如果命令行指定--rows,那他就是--rows指定的rowkey之间的数据,get请求必然会落在前几个region上,导致负载不均衡,性能测试效果不佳。 效果如图:
最终,在命令中再添加一个--size参数即可。该参数值与表总行数(总大小;根据数据生成时指定方式而定)保持一致即可。
hbase pe --nomapred --rows=100000 --size=10 --table=Test1 randomRead 10