YCSB大数据存储压测工具推荐

前置工作

针对大数据相关存储进行压测,本文以Hbase1.2.X版本为例进行描述:

获取二进制文件

方式1:源码下载git@github.com:brianfrankcooper/YCSB.git,针对源码操作如下:

支持所有类型存储:mvn clean package

仅支持单一存储构建:mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package

方式2:使用已编译好的二进制文件,具体文件链接:https://github.com/brianfrankcooper/YCSB/releases/download/0.14.0/ycsb-0.14.0.tar.gz

设置Hbase集群相关配置

找到hbase版本hbase12对应的ycsb客户端hbase12-binding,创建conf目录,将hbase 集群对应的hbase-site.xml文件下载至该目录;确保可以通过域名访问hbase集群;在hbase集群中创建相关表(由于workload中指定数据源,所以创建的表需要对应起来, 否则需要自定义数据生成器来进行测试-不推荐),ycsb不负责表的创建;

测试实施

数据装载

./bin/ycsb.sh load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=100000000 -p operationcount=100000000 -threads 50 -srecordcount=100000000 总共的

-P workloads/workloada 该项参数是必须的,但是其中的内容可以被命令行中的-p参数覆盖,各参数具体含义如下:

recordcount=100000000 总共的操作条数 (load时)

operationcount=100000000 总共操作的次数 (run时)

workload=com.yahoo.ycsb.workloads.CoreWorkload 数据生成器(默认usertable表)

readallfields=true 在读取的时候,是否需要读取所有字段

readproportion=0.5 读操作占比

updateproportion=0.5 update操作占比scanproportion=0 scan操作占比

insertproportion=0 insert操作占比

requestdistribution=zipfian run时使用的分布

-s :每 10s 打印一次客户端状态,用于调试;

-threads:客户端线程数,默认为 1;

-target:每秒的目标操作数,默认为无限制(尽可能快地完成操作);

Linux环境:需要使用ycsb.sh 非ycsb;需要使用 -threads 非 -thread;table=usertable -p columnfamily=cf

workloada中参数说明,其中命令行中指定的参数值会覆盖默认值

数据运行

./bin/ycsb.sh run hbase12 -P workloads/workloadd -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=1000000 -threads 1000 -s

替换不同workload来进行测试,不同workload含义如下:

workloada:读写占比50:50;

workloadb:读写占比95:5;

workloadc:读写占比100:0;

workloadd:读最近更新:

该workload 会插入新纪录,越新读取概率越大;

workloade:小范围查询:该 workload 会查询小范围纪录非单个纪录;

workloadf:读取-修改-写入:该workload 读取一个纪录后修改该纪录,最后写回;

测试结果

结果参数说明:

RunTime(ms):运行总时间

Throughput(ops/sec):吞吐量,每秒操作数

[TOTAL_GCS_PS_Scavenge], Count:Parallel Scavenge 回收次数[TOTAL_GC_TIME_PS_Scavenge], Time(ms):Parallel Scavenge 回收时间[TOTAL_GC_TIME_%_PS_Scavenge], Time(%):Parallel Scavenge 回收时间百分比

[TOTAL_GCS_PS_MarkSweep], Count:PS MarkSweep 回收次数[TOTAL_GC_TIME_PS_MarkSweep], Time(ms):PS MarkSweep 回收时间[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%):PS MarkSweep 回收时间百分比

[TOTAL_GCs], Count:全局 GC 次数

[TOTAL_GC_TIME], Time(ms):全局 GC 时间

[TOTAL_GC_TIME_%], Time(%):全局 GC 时间百分比不同操作类型:READ\UPDATE\CLEANUP\SCAN等;

Operations :总操作数

Avg(us) :平均延迟(微秒)

Min(us):最小延迟

Max(us):最大延迟

95thPercentileLatency(us) 95%的样本延迟低于该值

99thPercentileLatency(us) 99%的样本延迟低于该值

Return=OK, 50011 结果(正确),总操作数(50011)

备注

YCSB 的延迟为端到端的延迟,在开始调用数据库接口层方法前开始计时,在方法返回时结束计时,延迟包括这几个部分:在接口层内代码的运行时间+客户端到数据库服务器的网络延迟+数据库的执行时间;不包括由-target节流参数引入的延迟

附加网址:

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

https://labs.yahoo.com/news/yahoo-cloud-serving-benchmark/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容