文章目录

基本信息

Hbase与PG测试使用YCSB压力测试工具

采用21w行数据+21w操作数来最大化模拟20G数据场景

测试方法

HBASE

  • 首先下载YCSB,解压

  • 接下来创建测试数据库

    hbase shell命令打开shell命令行

    hbase(main):001:0> n_splits = 20 # HBase recommends (10 * number of regionservers)
    hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
    
  • 把hbase的conf目录下的|$HBASE_HOME/conf/hbase-site.xml(比如我本机是/usr/local/hbase/conf/hbase-site.xml)复制到我们下载的YCSB中的hbase14下的conf文件夹中

  • 接下来装载数据

    $ ./bin/ycsb load hbase14 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=210000 -p operationcount=210000 -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=/Users/laijie/ -threads 50 -s
    # 注意这里面的path更换为本机可以存放文件的目录,并且注意这个文件等会还会用
    
  • 装载好之后开始跑测试

    $ ./bin/ycsb run hbase14 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=210000 -p operationcount=210000 -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=/Users/laijie/ -threads 50 -s
    # 注意这里面的path更换为本机可以存放文件的目录,并且注意这个文件等会还会用
    

这里面使用的是workloada,想要测试其他情况更换参数即可

  • Workload A:
    • 重更新,50% 读 50% 写,例如 session sotre
  • Workload B:
    • 读多写少,95% 读 5% 写,例如 photo tagging
  • Workload C:
    • 只读:100% 读,例如 user profile cache
  • Workload D:
    • 读最近更新:这个 workload 会插入新纪录,越新的纪录读取概率越大,例如:user status updates
  • Workload E:
    • 小范围查询:这个 workload 会查询小范围的纪录,而不是单个纪录,例如:threaded conversations
  • Workload F:
    • 读取-修改-写入:这个 workload 会读取一个纪录,然后修改这个纪录,最后写回,例如:user database

跑完之后测试结果如下

2019-08-22 10:56:17:879 10 sec: 137084 operations; 13705.66 current ops/sec; est completion in 6 second READ: Count=68504, Max=178687, Min=813, Avg=3263.97, 90=4379, 99=9751, 99.9=23583, 99.99=144511
2019-08-22 10:56:21:776 13 sec: 210000 operations; 18710.8 current ops/sec; READ: Count=36475, Max=29167, Min=286, Avg=2597.52, 90=3033, 99=6147, 99.9=14079, 99.99=20399 UPDATE: Count=36086, Max=26079, Min=265, Avg=2701.23, 90=3137, 99=6315, 99.9=15215, 99.99=20463, RunTime(ms), 13898
[OVERALL], Throughput(ops/sec), 15110.087782414736
[TOTAL_GCS_PS_Scavenge], Count, 23
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 111
[TOTAL_GC_TIME%PS_Scavenge], Time(%), 0.7986760684990647
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 32
[TOTAL_GC_TIME%PS_MarkSweep], Time(%), 0.23024895668441503
[TOTAL_GCs], Count, 24
[TOTAL_GC_TIME], Time(ms), 143
[TOTAL_GC_TIME_%], Time(%), 1.0289250251834796
[READ], Operations, 104979
[READ], AverageLatency(us), 3032.414387639433
[READ], MinLatency(us), 286
[READ], MaxLatency(us), 178687
[READ], 95thPercentileLatency(us), 5127
[READ], 99thPercentileLatency(us), 9151
[READ], Return=OK, 104979
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 191.15
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 17615
[CLEANUP], 95thPercentileLatency(us), 20
[CLEANUP], 99thPercentileLatency(us), 1020
[UPDATE], Operations, 105021
[UPDATE], AverageLatency(us), 3187.596452138144
[UPDATE], MinLatency(us), 265
[UPDATE], MaxLatency(us), 260863
[UPDATE], 95thPercentileLatency(us), 5315
[UPDATE], 99thPercentileLatency(us), 9439
[UPDATE], Return=OK, 105021

然后我们会在设定的目录下面得到几个hdr文件,包括INSERT.hdr、READ.hdr、UPDATE.hdr等,我们要用histogram自带工作来进行图例的生成

  • 首先我们解压必需软件文件夹中的HdrHistogram然后导入到IntelliJ Idea中,通过mvn工具,先build,然后package生成histogram.jar文件

在这里插入图片描述

  • 接下来我们在目录根使用已经写好的脚本进行格式转换

在这里插入图片描述

$ ./HistogramLogProcessor -i INSERT.hdr -o insert -outputValueUnitRatio 1000

$ ./HistogramLogProcessor -i UPDATE.hdr -o update -outputValueUnitRatio 1000
$ ./HistogramLogProcessor -i READ.hdr -o read -outputValueUnitRatio 1000
  • 格式转换后我们可以得到hgrm文件
  • 最后在转换网址中即可得到图例

PG

pg的基本步骤差不多,下面是一些

  • 从Postgresql官网下载JDBC,放到 ycsb-0.15.0/jdbc-binding/lib 文件夹下,下载的是postgresql-42.2.6.jar
  • 修改ycsb-0.15.0/jdbc-binding/conf/db.properties配置文件
db.driver=org.postgresql.Driver

db.url=jdbc:postgresql://localhost/foo  // foo替换为postgresql里面的一个数据库
db.user=lemon                            // postgresql的用户名
ddb.passwd=lemon                        // postgresql的密码
  • 在ycsb-0.15.0文件夹下面执行下面命令,创建usertable表

    $ java -cp jdbc-binding/lib/jdbc-binding-0.15.0.jar:jdbc-binding/lib/postgresql-42.2.6.jar com.yahoo.ycsb.db.JdbcDBCreateTable -P jdbc-binding/conf/db.properties -n usertable
    
  • 执行load程序,加载数据

    $ ./bin/ycsb load jdbc -s -P workloads/workloada -P jdbc-binding/conf/db.properties -cp jdbc-binding/lib/postgresql-42.2.6.jar -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=../ -p recordcount=210000 -p operationcount=210000 -threads 50 -s # 仍然是要注意替换路径
    
  • 执行run程序

    $ ./bin/ycsb run jdbc -s -P workloads/myworkload -P jdbc-binding/conf/db.properties -cp jdbc-binding/lib/postgresql-42.2.6.jar -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=../ -threads 50 -s
    

在这里插入图片描述

[OVERALL], RunTime(ms), 424850
[OVERALL], Throughput(ops/sec), 494.29210309521005
[TOTAL_GCS_PS_Scavenge], Count, 35
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 134
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.03154054372131341
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 35
[TOTAL_GC_TIME], Time(ms), 134
[TOTAL_GC_TIME_%], Time(%), 0.03154054372131341
[READ], Operations, 104951
[READ], AverageLatency(us), 599.9616297129137
[READ], MinLatency(us), 61
[READ], MaxLatency(us), 61535
[READ], 95thPercentileLatency(us), 1230
[READ], 99thPercentileLatency(us), 2069
[READ], Return=OK, 104951
[CLEANUP], Operations, 50
[CLEANUP], AverageLatency(us), 999.9
[CLEANUP], MinLatency(us), 111
[CLEANUP], MaxLatency(us), 6411
[CLEANUP], 95thPercentileLatency(us), 3045
[CLEANUP], 99thPercentileLatency(us), 6411
[UPDATE], Operations, 105049
[UPDATE], AverageLatency(us), 189664.3654104275
[UPDATE], MinLatency(us), 6156
[UPDATE], MaxLatency(us), 20922367
[UPDATE], 95thPercentileLatency(us), 436223
[UPDATE], 99thPercentileLatency(us), 3047423
[UPDATE], Return=OK, 105049

转换为图的操作与Hbase一致

测试图例

HBASE插入延迟图例

在这里插入图片描述

HBASE更新读取延迟图例

在这里插入图片描述

PG插入延迟图例

在这里插入图片描述

PG更新读取延迟图例

在这里插入图片描述