HBase性能测试

测试工具YCSB

自带有hbase pe,但是pe只能统计每个线程执行的情况,不能统计整体的状态。所以还是推荐使用YCSB

https://github.com/brianfrankcooper/YCSB

使用参考文档:

https://github.com/brianfrankcooper/YCSB/wiki

 

前置准备

一:首先确认集群配置,比如cpu、内存、磁盘、网络带宽

二:创建hbase表,设置表重要属性,比如使用哪种压缩,哪种块编码等等。一般也会创建好预分区,在创建预分区的时候,由于YCSB默认生成的rowkey是以“user”开头的,所以创建预分区应做对应调整,比如:

create 'ycsb01',{NAME => 'f1',COMPRESSION => 'SNAPPY'},SPLITS => ['user1','user2','user3','user4','user5','user6','user7','user8','user9']

 

三:定义我们的workload,YCSB自带的也有几种workload,可以参照来定义我们自己的负载情况,

比较核心的配置如下:

recordcount: YCSB load命令的参数,指总数据条数 (default: 1000)
Operationcount: YCSB run(运行压力测试)命令的参数,默认值1000表示默认选取数据库中的1000条数据进行压力测试。对于workloada这种测试场景,就意味着读数据在500左右,写数据也在500左右
​
fieldcount: 字段个数 (default: 10)
fieldlength: 每个字段的长度 (default: 100)
minfieldlength: 每个字段最小的长度 (default: 1)
readallfields: 是否读取所有字段(default: true)
writeallfields: 是否写/更新所有字段 (default: false)
readproportion: read操作比例 (default: 0.95)
updateproportion: update操作比例 (default: 0.05)
insertproportion: insert操作比例 (default: 0)
scanproportion: scan操作比例 (default: 0)
​
requestdistribution: 使用哪种数据分布方式,主要有uniform, zipfian, hotspot, sequential, exponential or latest可选 (default: uniform)
Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)。
​
minscanlength: scan时候,最小的scan条数(default: 1)
maxscanlength: scan时候,最大的scan条数(default: 1000)
scanlengthdistribution: scan时候,怎么选择scan的条数,[scan的条数介于1到maxscanlength之间] (default: uniform)
​
insertstart: 在并行执行loads和runs的时候,定义当前YCSB实例的起始数据 (default: 0)
insertcount: 在并行执行loads和runs的时候,定义当前YCSB实例要操作的数据条数 (default: recordcount)
​
fieldnameprefix: 字段名的前缀 (default: “field”)

 

运行 Workload

运行workload大概有以下几个步骤:

  1. 选择符合场景的workload

  2. 配置合适的参数(比如客户端线程数)

  3. 执行Load阶段数据加载(workload有两个阶段,一个是loading阶段加载数据,一个是transactions阶段在这些数据上执行操作)

  4. 执行workload

 

执行Load

nohup ycsb_home/bin/ycsb load hbase12 -P workloads/workloada -cp ycsb_home/hbaseconf -p table=ycsb01 -p columnfamily=f1 -threads 10 -s > ycsb_home/log/ycsb_load.log &

 

load:表示的是执行的load阶段

hbase12:对应hbase1.2版本

-P workloads/workloada:指定负载配置

-cp ycsb_home/hbaseconf:指定hbase client配置文件

-p table=ycsb01:指定hbase表

-p columnfamily=f1:指定hbase表的列簇

-threads 10:指定ycsb线程数

-s:status,每隔10秒输出状态日志

日志分析

[OVERALL], RunTime(ms), 16487.0
[OVERALL], Throughput(ops/sec), 6065.384848668648
    [OVERALL] 区显示测试总体情况
        RunTime(ms) 运行总时间
        Throughput(ops/sec) 吞吐量,每秒操作数
[TOTAL_GCS_PS_Scavenge], Count, 23.0
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 88.0
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5337538666828411
[TOTAL_GCS_PS_MarkSweep], Count, 0.0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 23.0
[TOTAL_GC_TIME], Time(ms), 88.0
[TOTAL_GC_TIME_%], Time(%), 0.5337538666828411
    [TOTAL_GC*] 区显示垃圾回收情况
    [TOTAL_GCS_PS_Scavenge], Count, 23.0 Parallel Scavenge 回收次数
    [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 88.0 Parallel Scavenge 回收时间
    [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.533 Parallel Scavenge 回收时间百分比
    [TOTAL_GCS_PS_MarkSweep], Count, 0.0 PS MarkSweep 回收次数
    [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0 PS MarkSweep 回收时间
    [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 PS MarkSweep 回收时间百分比
    [TOTAL_GCs], Count, 23.0 全局 GC 次数
    [TOTAL_GC_TIME], Time(ms), 88.0 全局 GC 时间
    [TOTAL_GC_TIME_%], Time(%), 0.533753866 全局 GC 时间百分比
[READ], Operations, 50011.0
[READ], AverageLatency(us), 4418.49443122513
[READ], MinLatency(us), 1584.0
[READ], MaxLatency(us), 208895.0
[READ], 95thPercentileLatency(us), 8207.0
[READ], 99thPercentileLatency(us), 11463.0
[READ], Return=OK, 50011
    [READ] 区显示读取操作的统计结果
        Operations 总操作数
        AverageLatency(us) 平均延迟(微秒)
        MinLatency(us) 最小延迟
        MaxLatency(us) 最大延迟
        95thPercentileLatency(us) p95延迟
        99thPercentileLatency(us) p99延迟
        Return=OK, 50011 结果(正确),总操作数
​
[CLEANUP](清理操作)、[UPDATE](更新操作)等等和 [READ] 区类似

 

 

执行Run

nohup ycsb_home/bin/ycsb run hbase12 -P workloads/workloada -cp ycsb_home/hbaseconf -p table=ycsb01 -p columnfamily=f1 -threads 10 -s > ycsb_home/log/ycsb_run.log &

 

注意:Load阶段其实就是装载数据即往hbase中插入数据,workload文件中的recordcount就是将要插入的条数。run阶段就是对hbase进行各种操作,operationcount就是操作数,因此load阶段必须要正确执行完成,否则在run阶段会有类似于[READ-FAILED]之类的错误。

注意事项

1.ycsb client尽量运行在非hbase集群节点,以减少ycsb client对regionserver资源的占用,影响测试结果。

2.留意ycsb client网络IO情况,如果网络带宽被打满,测不出实际性能。这种情况可以设置多ycsb client并行运行

3.多ycsb client并行运行,最后的执行结果综合多个取平均值即可,主要关注TPS(ops/sec)和平均延迟、p95、p99延迟。

posted @ 2020-09-24 15:44  sw_kong  阅读(1487)  评论(2编辑  收藏  举报