1、YCSB080安装与初步使用YCSB安装与初步使用整理:岳凯 2016年4月29日1 什么是YCSB1.1 简介YCSB英文全称:Yahoo! Cloud Serving Benchmark。是 Yahoo 公司的一个用来对云服务(cloud serving)/NoSQL/Key-Value Store进行基础测试的工具,代码开源。目标是促进新一代云数据服务系统的性能比较。1.2 YCSB客户端架构随着cloud serving的流行,传统数据库不能满足Avalability、Scalabilty等要求,简化了功能(表连接等)、一致性(事务处理)的NoSQL数据库开始流行。这类数据库数量很多,
2、各有tradeoff(read and write,latency and durability,sync and async等),开发人员和用户很难根据应用的特点选择合适的解决方案。YCSB的目的是提供一个公平的舞台。上图是YCSB的结构,可以看成是一个数据库客户端。暗色的模块是可以替换的,Workload Executor是产生应用负载的,DB Interface Layer是将特定数据库的API转为YCSB的API,用户可以自定义负载和数据库。目前YCSB自带了6种负载(workloads/目录下),其中五种如下表。用户可以自定义操作(read、update、insert和scan)的比
3、例,以及选择操作目标记录的分布:Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)。YCSB目前支持多种数据库,如:HBase、Hypertable、Cassandra、Couchbase、Voldemort、MongoDB、OrientDB、Infinispan、Redis、GemFire、DynamoDB、Tarantool、 Memcached等。用户可以用任意负载测试任意数据库。YCSB有很好的扩展性,只要按要求实现DB抽象类,就可以添加新的数据库支持。1.3 当前版本当前版本:YCSB 0.8.0, 发布时间:Ap
4、r 13, 2016源代码地址:当前版本对各种数据库的测试情况(Tested Databases):Tested supportThe following datastore bindings have been verified as working as of this release: Apache Accumulo 1.6.0 (via accumulo binding). Apache Cassandra 2.5.5 (via cassandra2-cql binding). Couchbase 4.1 (via couchbase binding). DynamoDB using
5、AWS SDK 1.10.48 (via dynamodb binding). Elasticsearch 2.0.2, 2.1.2, 2.2.2, 2.3.1 (via elasticsearch binding). Apache Geode (incubating) 1.0.0-incubating.M1 (via geode binding). Apache HBase 1.0.0 (CDH5.5.2) (via hbase10 bindings). MongoDB 1.8.5(async only), 2.0.9, 2.2.7, 2.4.14, 2.6.12, 3.0.11, 3.2.
6、4 (via mongodb and mongodb-async bindings). Amazon S3 (via s3 binding). Tarantool 1.6.6-249, 1.6.8, 1.7-alpha (via tarantool binding).Supported Aerospike (via aerospike binding). Apache HBase 0.9.8 (via hbase098 binding). Apache Kudu (incubating) (via kudu binding). Apache Solr 5.4.0 (via solr bindi
7、ng). Google Cloud Datastore (via googledatastore binding). JDBC on MySQL 5.1.73 (via jdbc binding). Memcached 1.4.4 (via memcached binding).Untested Apache Cassandra versions prior to 2.0 (via cassandra-7, cassandra-8, cassandra-10 bindings). Apache Cassandra versions 3+ (via cassandra2-cql bindings
8、). Apache HBase (via hbase094 binding). HyperTable (via hypertable binding). Infinispan (via infinispan and infinispan-cs bindings) Mapkeeper (via mapkeeper binding) NoSQLDB (via nosqldb binding) OrientDB 2.1.2 (via orientdb binding).2 YCSB安装YCSB的编译和安装依赖Maven、JRE、和Python。2.1 Maven下载与安装1、Maven官网:官网:h
9、ttp:/maven.apache.org/最新版本:2015-11-18,Maven 3.3.9下载地址:2、下载及安装1)进入opt目录,创建/opt/modules/目录# cd /opt# mkdir modules# cd modules/2)下载Maven,并解压# wget # unzip apache-maven-3.3.9-bin.zip3)追加路径到/etc/profile环境变量中# vi /etc/profileexport MAVEN_HOME=/opt/modules/apache-maven-3.3.9PATH=$MAVEN_HOME/bin:$PATHexpor
10、t PATH使环境变量生效# source /etc/profile4)使用mvn -version验证安装安装成功。5)JAVA安装Maven需要调用JRE,如果没有安装JDK,需要单独安装JDK。2.2 YCSB下载与安装源代码地址:1)下载源代码并解压缩进入/usr/local# cd /usr/local # wget # unzip master解压后的YCSB-master目录:2)编译YCSB源代码编译有两种方式方式一:全部编译命令: mvn clean package说明:编译全部数据库,要下载很多依赖包,时间要很久,不建议采用。方式二:只编译一个数据库,如编译mongodb的
11、命令为:mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package# cd YCSB-master/# mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package下载无数依赖包之后,出现如下提示,说明YCSB编译成功。如果编译过程意外中止,可以重新运行编译命令。我使用mongodb验证,所以只编译了YCSB的mongodb部分,也用了很长时间,中断了几次。3)其他问题问题一:缺少argparse包。运行YCSB,如果报错如下:ERROR argparse not found. Try i
12、nstalling it via pip.说明:报错提示缺少argparse包,让通过PIP方式下载argparse。 argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。如果服务器已经安装了PIP,可以使用命令pip install argparse 下载;如果没有安装pip,有easy_install,可以使用命令easy_install argparse下载。安装后问题解决。3 YCSB初步使用3.1 YCSB运行命令命令的格式是:bin/ycsb load|run dbname P path/to/workloadfile p ke
13、y=value具体例子如:./bin/ycsb load mongodb -threads 100 -P workloads/workloada./bin/ycsb run mongodb -threads 100 -P workloads/workloada bin/ycsb load redis -s -P workloads/workloada -p redis.host=127.0.0.1 -p redis.port=6379 bin/ycsb run redis -s -P workloads/workloada -p redis.host=127.0.0.1 -p redis.po
14、rt=6379 -threads 128 -p operationcount=10000 -p measurementtype=timeseries -p timeseries.granularity=5000说明:用户首先需要用load初始化数据库,然后用run运行负载。dbname指定了目标数据库。-P指定负载文件的位置。-p用来设置一些参数,比如数据库的ip和port。-threads是模拟的线程数。还有一个常用的参数是-target,指的是每秒最大操作数,当一秒内到达这个阈值,线程就会休眠1毫秒。当然,在运行YCSB之前,目标数据库必须是开启的。测试完成后,YCSB会打印平均/最小/最
15、大延迟等信息。3.2 Workload文件在YCSB-master/workloads目录下有6个workload文件,主要区别如下表:文件名模式各种操作比例具体参数workloadaUpdate heavy workloadread/update ratio: 50/50readproportion=0.5updateproportion=0.5workloadbRead mostly workloadread/update ratio: 95/5readproportion=0.95updateproportion=0.05workloadcRead onlyread/update rat
16、io: 100/0readproportion=1updateproportion=0workloaddRead latest workloadread/update/insertratio: 95/0/5readproportion=0.95updateproportion=0scanproportion=0insertproportion=0.05workloadeShort rangesscan/insert ratio: 95/5readproportion=0updateproportion=0scanproportion=0.95insertproportion=0.05workl
17、oadfRead-modify-writeRead/read-modify-write ratio: 50/50readproportion=0.5updateproportion=0scanproportion=0insertproportion=0readmodifywriteproportion=0.5Workload文件部分参数意思如下面注释:mongodb.url=mongodb:/localhost:27017 # 待测试mongo实例的数据库地址mongodb.database=ycsb # 测试时使用的数据库名称mongodb.writeConcern=normal # 写入安
18、全性为常规recordcount=10000 # 测试数据集的记录条数operationcount=10000 # 测试过程中执行的操作总数workload=com.yahoo.ycsb.workloads.CoreWorkload # workload实现类readallfields=true # 查询时是否读取记录的所有字段readproportion=0.5 # 读操作的百分比updateproportion=0.5 # 更新操作的百分比scanproportion=0 # 扫描操作的百分比insertproportion=0 # 插入操作的百分比 requestdistribution
19、=zipfian # 请求分布模式,包括:Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)3.3 运行YCSB1)创建自己的workload文件# cp workloada workloadyk01# vi workloadyk01添加如下mogodb的设置:mongodb.url=mongodb:/localhost:27017mongodb.database=ycsbmongodb.writeConcern=normal保存workloadyk01文件2)运行YCSB load# cd /usr/local/YCSB-
20、master/# ./bin/ycsb load mongodb -threads 100 -P workloads/workloadyk01运行成功后显示:说明如下:OVERALL, RunTime(ms), 720.0 / 数据加载所用时间:0.7秒OVERALL, Throughput(ops/sec), 1388.888888888889 /加载操作的吞吐量,平均并发量每秒1388条TOTAL_GCs, Count, 2.0 CLEANUP, Operations, 100.0 /参数中的100个线程CLEANUP, AverageLatency(us), 450.58 /平均响应时间
21、0.45msCLEANUP, MinLatency(us), 0.0 /最小响应时间0msCLEANUP, MaxLatency(us), 45055.0 /最大响应时间45msCLEANUP, 95thPercentileLatency(us), 1.0CLEANUP, 99thPercentileLatency(us), 8.0INSERT, Operations, 1000.0 /执行insert操作的总数,1000INSERT, AverageLatency(us), 29928.784 /每次insert操作的平均延时29.9msINSERT, MinLatency(us), 827
22、.0 /所有insert操作的最小延时,0.8msINSERT, MaxLatency(us), 351231.0 /所有insert操作的最大延时,351msINSERT, 95thPercentileLatency(us), 203519.0 / 95%的insert操作延时在203.5ms以内INSERT, 99thPercentileLatency(us), 329983.0 / 99%的insert操作延时在329.9ms以内INSERT, Return=OK, 1000 /成功返回数10003)运行YCSB run# cd /usr/local/YCSB-master/# ./bi
23、n/ycsb run mongodb -threads 100 -P workloads/workloadyk01运行成功后显示:OVERALL, RunTime(ms), 720.0OVERALL, Throughput(ops/sec), 1388.888888888889TOTAL_GCs, Count, 2.0READ, Operations, 514.0READ, AverageLatency(us), 27392.836575875488READ, MinLatency(us), 940.0READ, MaxLatency(us), 340991.0READ, 95thPercen
24、tileLatency(us), 169087.0READ, 99thPercentileLatency(us), 272895.0READ, Return=OK, 514CLEANUP, Operations, 100.0CLEANUP, AverageLatency(us), 456.31CLEANUP, MinLatency(us), 0.0CLEANUP, MaxLatency(us), 45631.0CLEANUP, 95thPercentileLatency(us), 1.0CLEANUP, 99thPercentileLatency(us), 9.0UPDATE, Operati
25、ons, 486.0UPDATE, AverageLatency(us), 31491.29012345679UPDATE, MinLatency(us), 1027.0UPDATE, MaxLatency(us), 331775.0UPDATE, 95thPercentileLatency(us), 189183.0UPDATE, 99thPercentileLatency(us), 288767.0UPDATE, Return=OK, 4863.4 查看MongoDB中的数据情况打开mongo shell# /usr/local/mongodb/mongodb-3.2.4/bin/mong
26、o show dbslocal 0.000GBycsb 0.002GB use ycsbswitched to db ycsb show collectionsusertable db.usertable.count()1000可以看到在usertable数据集合里面有1000条数据,是YCSB插入的。如果再次运行YCSB load,需要删除mongodb中的usertable数据集合,否则会报INSERT-FAILED错。删除mongodb中的usertable数据集合语句如下: show dbslocal 0.000GBycsb 0.002GB use ycsbswitched to db ycsb db.dropDatabase() dropped : ycsb, ok : 1 show dbslocal 0.000GB
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1