前置工作
针对大数据相关存储进行压测,本文以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/