上次通过Hbase自带测试工具,对比不同客户端数量及数据量的插入性能, 由于上次测试对表没有预分区,所以补一个预分区测试,对比一下在分区和不分区的情况下,有什么区别。
hbase的线性扩展得益于多region同时工作,region越多,性能相比肯定越好,请求发到master之后,由master选取相关region server给客户端,之后就是客户端和region server直接通信,Master的工作相比少很多,负载也不会很大,这是HBASE线性扩展的根本。 但是前提是你的rowkey能随机同时随机分发到多台region server,否者HBASE底层提供负载均衡就白搭了。 预先分区的好处在于2个方面, 减少分裂,另外就是负载均衡,因为预先分区了,每个key落入不同的region 自然就负载均衡了。
测试命令:
time hbase org.apache.Hadoop.hbase.PerformanceEvaluation --rows=1000000 sequentialWrite 10
预先分区表:
create 'TestTable',{SPLITS_FILE => 'split.txt'}, {NAME => 'info'}
0000000000000000000100000
0000000000000000000150000
0000000000000000000200000
0000000000000000000250000
0000000000000000000300000
0000000000000000000400000
0000000000000000000500000
0000000000000000000600000
0000000000000000000700000
0000000000000000000800000
0000000000000000000900000
0000000000000000001000000
0000000000000000002000000
0000000000000000003000000
0000000000000000004000000
0000000000000000005000000
0000000000000000006000000
0000000000000000007000000
0000000000000000008000000
0000000000000000009000000
0000000000000000010000000
预先分区测试:
File Input Format Counters
Bytes Read=455815
File Output Format Counters
Bytes Written=1331
real 1m24.666s
user 0m21.816s
sys 0m2.465s
无预先分区测试:
Row count=10000000
File Input Format Counters
Bytes Read=455815
File Output Format Counters
Bytes Written=1385
real 2m22.463s
user 0m20.386s
sys 0m2.168s
从上面数据可以看到,预分区比不分区要快将近1分钟,为了保证测试的准确性,每个测试我基本跑了3次。
使用任何数据库,不管是DBRMS还是NO-SQL,我们都尽量要避免其软肋,每个数据库都有其实现原理,避开弱点,减少问题出现的概率。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17036462/viewspace-2141521/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17036462/viewspace-2141521/