Yahoo(Ycsb)

1.工具介绍

        yahoo! Cloud Serving Benchmark (YCSB) 是一个Java语言实现的主要用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等,

                 这个框架具有很好的可扩展性,可以通过配置文件来指定需要进行什么样的workload的测试,比如读写比例多少,每条记录多大,每个字段多大,并发数多大,进行随机选择使用的分布(比如读一条数据的时候)等。

        

 2.Git地址

                 GitHub - brianfrankcooper/YCSB: Yahoo! Cloud Serving Benchmark

 3.工具下载

                 Home · brianfrankcooper/YCSB Wiki · GitHub

 4  工具使用

        工具结构

hbase测试方案 hbase性能测试工具_压测

         压测场景

                           上述结构中包括了一个workloads文件夹,其中包括了6中压测场景分别如下

                           workloada: 读写均衡型,【Read/update】(50/50)

                           workloadb: 读多写少型,【Read/update】(95/5)

                           workloadc: 只读型,【Read/update】(100/0)

                           workloadd: 读最近写入记录型,【Read/update/insert 】(95/0/5)

                           workloade: 扫描小区间型,【Scan/insert】(95/5)

                           workloadf: 读写入记录均衡型,【Read/read-modify-write】(50/50)

      注意事项

                 关于压测的一些执行参数,可以参考workloads目录下面给出的一个模板文件具体如下所示(workload_template:运行压测的一个模板【具体内容可以参考工具内部使用说明】)

集群压测

     1. 压测准备

         1.1 环境准备

               针对HBASE集群压测前根据当前集群的HBASE版本拷贝集群的hbase-site文件到ycsb的hbase目录下面,具体如下所示:

hbase测试方案 hbase性能测试工具_hbase测试方案_02

         1.2 创建HBASE压测表

               n_splits = 10                create 'table_name', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}                disable 'table_name'                alter 'table_name', NAME => 'cf', COMPRESSION => 'GZ'                enable 'table_name'

     2. Mock数据

          2.1 执行命令

                nohup ../ycsb-0.15.0/bin/ycsb load hbase20 -P ../ycsb-0.15.0/workloads/workloadb -p table=table_name -p columnfamily=cf -p recordcount=20000 -p insertcount=10000 -p insertstart=0-threads 10 -s >> /logs/load/load_10.txt 2>&1 &

                nohup ../ycsb-0.15.0/bin/ycsb load hbase20 -P ../ycsb-0.15.0/workloads/workloadb -p table=table_name -p columnfamily=cf -p recordcount=20000 -p insertcount=10000 -p insertstart=10000 -threads 10 -s >> /logs/load/load_10.txt 2>&1 &

          2.2 参数详解

                 table:当前带压测的数据表名

                 columnfamily:具体操作的列簇名称

                 recordcount:本次mock的总记录数

                 insertcount:开始从那条记录开始插入

                 threads:执行数据mock的线程数

           2.3 特殊说明

                 上述执行命令中有2条造数据的命令,可以分布在不同服务器上执行(总体上造10000条数据,其中启动两个进程同时造模拟数据,每个进程造5000条,每个进程里面有50个线程来执行)。

     3. 执行压测

         3.1 执行命令

               nohup ../ycsb-0.15.0/bin/ycsb run hbase20 -P ../ycsb-0.15.0/workloads/workloadb -p table=table_name -p columnfamily=cf -p operationcount=100000 -threads 10 -s >> /logs/run/run_b_10.txt 2>&1 &

         3.2 参数详解

               table:当前带压测的数据表名

               columnfamily:具体操作的列簇名称

               operationcount:本次压测需要执行的记录数

               threads:执行压测启动的线程数

         3.3 特殊说明

               在每一个workload场景的模板中都有一个参数(requestdistribution )有如下的选项

               uniform:随机选择一个记录                sequential:按顺序选择记录                zipfian:根据 Zipfian 分布来选择记录。大致意思就是互联网常说的80/20原则,也就是20%的key,会占有80%的访问量                latest:和 Zipfian 类似,但是倾向于访问新数据明显多于老数据                hotspot:热点分布访问                exponential:指数分布访问 

报告解读

        主要关注:执行时间RunTime、吞吐量Throughput,

        以及读和写的平均延迟等95thPercentileLatency、99thPercentileLatency

     1. 压测报告

       

[OVERALL], RunTime(ms), 10252
          [OVERALL], Throughput(ops/sec), 9754.194303550526
          [TOTAL_GCS_PS_Scavenge], Count, 24
          [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 66
          [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.6437768240343348
          [TOTAL_GCS_PS_MarkSweep], Count, 1
          [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 23
          [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.2243464689816621
          [TOTAL_GCs], Count, 25
          [TOTAL_GC_TIME], Time(ms), 89
          [TOTAL_GC_TIME_%], Time(%), 0.8681232930159969
          [READ], Operations, 94990
          [READ], AverageLatency(us), 909.1641435940626
          [READ], MinLatency(us), 201
          [READ], MaxLatency(us), 76031
          [READ], 95thPercentileLatency(us), 1936
          [READ], 99thPercentileLatency(us), 5663
          [READ], Return=OK, 94990
          [CLEANUP], Operations, 20
          [CLEANUP], AverageLatency(us), 156.35
          [CLEANUP], MinLatency(us), 0
          [CLEANUP], MaxLatency(us), 2847
          [CLEANUP], 95thPercentileLatency(us), 217
          [CLEANUP], 99thPercentileLatency(us), 2847
          [UPDATE], Operations, 5010
          [UPDATE], AverageLatency(us), 1872.3073852295408
          [UPDATE], MinLatency(us), 616
          [UPDATE], MaxLatency(us), 33791
          [UPDATE], 95thPercentileLatency(us), 4371
          [UPDATE], 99thPercentileLatency(us), 9743
          [UPDATE], Return=OK, 5010