测试环境配置信息
Ambari+HDP大数据平台,5个节点服务器
CPU配置:16核 Intel 2.20GHz
操作系统:CentOS7.7/Linux x86_64
HDFS空间:4TB
HDFS文件备份数:3节点
Hbase MASTER和REGIONSERVERS各一个
测试数据模型
模拟某酒店顾客信息表1个列族,33列字段,目标数据量1亿+
一、新增数据性能
单条数据插入,平均不到250条/秒,每1000条需要4秒多,平均每条耗时4毫秒
本地往服务器批量插入数据,平均在1000条/秒左右
服务器上测试批量插入数据,基数2004万条,新增100万耗时693秒,平均1443条/秒
基数2004万条,新增1000万耗时6887秒,平均1452条/秒
基数2004万条,新增8000万耗时15:21:24,合55284秒,平均1447条/秒
结论:
随着入库数据量的增长插入数据性能没有受影响,一直比较稳定。
二、查询数据性能
1亿+数据量的表
1、Java客户端查询
连续根据rowKey查4条记录,分别耗时5575毫秒、39毫秒、6毫秒、4毫秒,初次查询较慢,需要几秒时间,之后查询很快,都是毫秒级响应。
2、HBase shell查询
连续根据rowKey查3条记录,分别耗时137毫秒、29毫秒、31毫秒
连续根据rowKey查同一条记录,分别耗时31毫秒、27毫秒、17毫秒
3、scan性能
HBase shell根据rowKey范围scan扫描10条记录,耗时159毫秒
4、行键过滤性能
根据rowKey前缀进行过滤查询,1亿+数据中过滤出1条记录耗时1170秒,
一直等待很长时间,效率很差,可能全表扫描了,不建议使用
三、修改数据性能
连续根据rowKey修改3条记录,分别耗时31毫秒、5毫秒、7毫秒
四、删除数据性能
连续根据rowKey删除3条记录,分别耗时54毫秒、3毫秒、22毫秒
五、数据导入性能
1、Kettle导入
Kettle 从csv读取数据导入HBASE库,平均1800条/秒左右
2、ImportTsv命令导入
HBASE ImportTsv命令从Hdfs上的csv目录导入数据2004万条,耗时2小时22分32秒,合8552秒,平均2343条/秒
六、count统计性能
1、HBase shell count命令统计
200万数据统计count数,耗时 61秒
2004.1009万数据统计count数,耗时664秒
2、执行 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'hotel_guest’命令统计
2004.1009万数据count数,耗时284秒
3、执行 hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'hotel_guest’命令统计
1亿+数据count数,耗时21分25秒,合1285秒
七、总结
Hbase库新增数据,以及根据RowKey修改、查询、删除数据性能较好,都是毫秒级响应,与MySQL小表操作基本相当,且性能不会像MySQL那样随着存入数据量增长而下降。
Hbase行键过滤性能较差,大数据量环境下不建议使用。
Hbase库数据批量导入性能与其他数据库相比没有优势,应该算比较低的。