如何安装HBase性能测试工具YCSB
YCSB
1.背景概念
英文全称:Yahoo!云服务基准 (YCSB)。它是雅虎推出的一款用于云服务基本测试的工具。目标是促进新一代云数据服务系统的性能比较。为四个广泛使用的系统订购了一组核心的基本测试和结果报告:Cassandra、HBase、PNUTS 和简单的分片 MySQL 实现。
2.资源获取
首先从官网下载源码并编译或者直接下载软件包
https://github.com/brianfrankcooper/YCSB/releases/tag/ 0.10.0
编译需要依赖maven项目和其他资源包,比较麻烦。建议o 直接下载软件包。
添加一些编译内容:
下载最新源码
本地解压,进入源码根目录YCSB- 0.10。 0
如果要编译完整版本,直接输入
mvn clean package
如果编译成功,YCSB里面会有一个文件-0.10.0/distribution目录对应的ycsb压缩包,复制解压即可使用
这种方法编译出来的完整版ycsb适用于多种数据库,所以依赖的库太多,目标文件太大,耗时太长。不建议这样编译。
建议单独编译一个ycsb,仅用于测试某个数据库(如hbase)。
mvn -pl com.yahoo.ycsb:hbase10-binding -am clean package #我是这样编译的
编译结果摘录:
….. [INFO] 构建 tar: /opt/YCSB-0.10.0/hbase10/target/ycsb-hbase10-binding-0.10.0.tar.gz p> [信息] ------------------------------------------------------ --------------------------------- [INFO]反应器摘要: [信息] [信息] YCSB 根...................................... ...... 成功 [1.903s] [INFO] 核心 YCSB ........................................ ..... 成功 [8.384 秒] [信息] 每个数据存储绑定描述符 ........ 成功 [0.497 秒] [ INFO] YCSB 数据存储绑定父级........................成功[0.582s] [INFO] HBase 1.0 DB 绑定.... ............................成功[51.209s] [信息] --- ------------------------ ------------------------ ---------------------- [信息]取得成功 [信息] ------ ---------------------------- ---------------------- ------------ [INFO]总时间:1:03.143s [INFO]完成于:Sat Jul 09 11:30:05 PHT 2016 [INFO]最终内存:52M/1694M [INFO] ---------------------------------------------------------- -------------------- ------
|
如果这个方法编译成功,就会在YCSB-0.10中.0/hbase10/target目录下会有
ycsb-hbase10-binding-0.10.0.tar.gz压缩包,也就是我们的目标文件。解压后可以使用环境中的mvn仓库 172.7.1.216上的资源。在实际编译过程中,会遇到依赖包不匹配或者依赖包不存在的问题。您可以在search.maven.org上手动搜索并下载相应的资源并放在本地。进入~/.m2/repository/对应目录即可
这里我们测试的是hbase,所以我们直接下载了ycsb-hbase10-binding-0.10.0.tar.gz(注意这个仅针对hbase10 即hbase1.0适用,官网有一个软件包,适用于所有数据库 300M太大了,网络不好的话就不用下载了。)用吧。
3.配置与使用
这里首先要检查hbase-site.xml中的配置是否正确,否则运行ycsb时会报错
<属性> <名称>hbase.regionserver .global.memstore.size< /名称> <值>0.4值> 属性> . . < p>.<属性> <名称>hfile.block.cache.size名称> <值>0.2值>< /p>
|
将会下载ycsb-hbase10-binding- 0.10.0.tar.gz解压后使用
目录结构:
[root@node1 ycsb-hbase10-binding -0.10.0]# ll 总计 24 drwxr-xr-x 2 root root 46 Jul 8 15:12 bin drwxr-xr-x 2 root root 4096 Jul 8 15:12 lib -rw-r--r-- 1 root root 8082 Jul 7 20:45 LICENSE.txt -rw-r- -r-- 1 root root 615 Jul 7 20:45 NOTICE.txt -rw-r--r-- 1 root root 5484 Jul 7 20:45 README.md drwxrwxr-x 2 root root 126 Jul 7 20:45 工作负载
|
这里补充介绍一下ycsb版本的完整目录结构
[root@node1 ycsb-0.1.4] # ll 总计 20 drwxrwxrwx 2 501 场比赛 2012 年 2 月 24 日 31 日 bin < p>drwxr-xr-x 3 root root 16 Jul 8 11:49 cassandra- 绑定-rw-r--r-- 1 501 场比赛 2291 2012 年 2 月 24 日变更日志 drwxr-xr-x 3 root root 7月8日16日11:49核心 drwxr-xr-x 4 root root 7月8日27日11:49 gemfire-binding drwxr-xr- x 4 root root 27 Jul 8 11: 49 hbase-binding drwxr-xr-x 4 root root 27 Jul 8 11:49 infinispan-binding drwxr-xr-x 4 root root 27 Jul 8 11:49 jdbc -绑定 -rw-r--r-- 1 501个游戏8082 2012年2月19日LICENSE.txt drwxr-xr-x 3 root root 29 Jul 8 11:49 mapkeeper -binding drwxr-xr-x 3 root root 16 Jul 8 11:49 mongodb-binding drwxr-xr-x 4 root root 40 Jul 8 11:49 nosqldb-binding < /p> -rw-r--r-- 1 501 游戏 479 2012 年 2 月 19 日 NOTICE.txt -rw-r--r-- 1 501 游戏 952 2012 年 2 月 24 日自述文件 < /p> drwxr-xr-x 3 root root 7月8日16日11:49 redis绑定 drwxr-xr-x 2 root root 7月8日27日14:38结果 < p>drwxr-xr-x 4 root root 27 Jul 8 11:49 voldemort 绑定drwxrwxrwx 2 501 场比赛 102 2012 年 2 月 22 日工作负载
|
完整版需要手动将相关hbase库复制到hbase-binding的lib目录下,并将hbase-site.xml复制到hbase-binding的conf目录下hbase 绑定。
我们的 ycsb-hbase10-binding-0.10.0 更具针对性和精简性。 lib目录下有各种需要的库文件。无需手动从hbase的lib目录进行cp。没有conf目录,我们只需要直接使用bin下的ycsb即可。
具体使用方法为int如下:
1.在hbase上建表,YCSB需要在HBase中创建一个名为usertable的表,该表包含一个Cloumn Family,CF名称可以自定义。依次执行以下两条命令:
hbase(main):011:0* n_splits=120 => 120
hbase(main):015:0> 创建 'usertable','family',{SPLITS => ( 1...n_splits).map{|i| "user#{1000+i*(9999-1000)/n_splits}"}} 18.3610 秒内 0 行
=> Hbase::Table - usertable
|
命令含义:pre-splittingstrategy预分区及建表 p>
使用HBase shell创建表,同时创建一些预分片策略分区,这样可以防止第一次插入数据时出现热点
2.使用以下命令进行测试
首先初始化数据
-cp指定hbase的配置文件所在路径/usr/hdp/2.4.2.0-258/hbase/conf/(前面说过,精简版的ycsb没有conf目录)
用户首先需要用load初始化数据库,然后使用 run 运行负载。 dbname 指定目标数据库。
目前YCSB自带6种工作负载(在workloads/目录下),下表列出了其中的5种。用户可以自定义操作比例(读取、更新、插入、扫描),并选择操作目标记录的分布:Uniform(等概率随机选取记录)、Zipfian(随机选取记录,热点记录存在)和Latest(最近)所写的记录是热门记录)。
-P 指定负载文件的位置。
-p用于设置一些参数,比如数据库的ip、端口等。当然,在运行YCSB之前,目标数据库必须打开。测试完成后,YCSB会打印平均/最小/最大延迟等信息。参数ers线程recordcount等后面可以使用
-s 输出运行状态,运行时间较长时比较有用
[root@node1 ycsb-hbase10-binding -0.10.0] #bin/ycsb 加载 hbase10 -P 工作负载/workloada -cp/usr/hdp/2.4.2.0-258/hbase/conf/ -p table=usertable -p columnfamily=family -s -threads10 -p recordcount =100
#这里加载的是工作负载a负载,其中一半是读取和更新操作
2016-07-08 16:19:37,129 警告 [Thread-2] util.DynamicClassLoader:无法识别目录 hdfs://node1.dcom:8020/apps/ 的文件系统hbase/data/lib,被忽略 java.io.IOException: No FileSystem for schema: hdfs 这个错误可以忽略! ! ! 在 org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2579) 在 org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java: 2586) 在 org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89) 在 org.apache.hadoop.fs.FileSystem$Cache.getInternal (FileSystem.java:2625) 在 org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2607) 在 org.apache.hadoop.fs .FileSystem.get(FileSystem.java:368) 在 org.apache.hadoop.fs.Path.getFileSystem(Path.java:296) p> 位于 org.apache.hadoop.hbase.util.DynamicClassLoader. 位于 org.apache.hadoop.hbase.protobuf.ProtobufUtil. 位于 org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64) 位于 org.apache.hadoop.hbase。 Zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId .java:75) 在 org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86) 在 org. apache.hadoop.hbase.client .ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:833) 位于 org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation. 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance( DelegatingConstructorAccessorImpl.java :45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在 org.apache.hadoop.hbase.client.ConnectionFactory。 createConnection(ConnectionFactory.java:238) 在 org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218) 在 org.apache.hadoop。 hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119) 在 com.yahoo.ycsb.db.HBaseClient10.init(HBaseClient10.java:149) 在 com. yahoo.ycsb.DBWrapper.init(DBWrapper.java:99) 位于 com.yahoo.ycsb.ClientThread.run(Client.java:418) 位于 java.lang。 Thread.run(Thread.java:745)
|
Ycsb运行后打印分析结果:
[OVERALL],运行时间(ms),2787.0 数据加载时间:2.787 秒 p> [OVERALL ], Throughput(ops/sec), 35.88087549336204 加载操作的吞吐量,平均并发度为 35.88 条/秒 [TOTAL_GCS_PS_Scavenge], Count, 1.0 < p>[TOTAL_GC_TIME_PS_Scavenge],时间(毫秒),20.0[TOTAL_GC_TIME_%_PS_Scavenge],时间(%),0.7176175098672408 [TOTAL_GCS_PS_MarkSweep],计数,0.0 < p>[TOTAL_GC_TIME_PS_MarkSweep],时间(毫秒),0.0[TOTAL_GC_TIME_%_PS_MarkSweep],时间(%),0.0 [TOTAL_GCs],计数,1.0 < p>[ TOTAL_GC_TIME],时间(毫秒),20.0[TOTAL_GC_TIME_%],时间(%),0.7176175098672408 [CLEANUP],操作,2.0 p> [ CLEANUP], AverageLatency(us), 63575.0 平均响应时间 63.575ms [CLEANUP], MinLatency(us), 14.0 最小响应时间 0.014 ms [ CLEANUP], MaxLatency(us) ), 127167.0 最大响应时间 127.167ms [CLEANUP], 95thPercentileLatency(us), 127167.0 95% 的清理操作延迟在 127.167ms 以内 [CLEANUP], 99thPercentileLatency(us), 127167.0 99% 的清理操作延迟在 127.167ms 以内 < p>[ INSERT], Operations, 100.0 执行的插入操作总数,100[INSERT], AverageLatency(us), 13681.54 每次插入操作的平均延迟,13.68154ms < p>[INSERT ], MinLatency(us), 5556.0 所有插入操作的最小延迟为 5.556ms[INSERT], MaxLatency(us), 201343.0 所有插入操作的最大延迟为 201.343ms< /p> [INSERT], 95thPercentileLatency(us), 30063.0 95% 的插入操作延迟在 30.063ms 以内 [INSERT], 99thPercentileLatency(us), 53183.0 99% 的插入操作延迟在53.183ms内 [INSERT], Return=OK, 1000 成功返回数, 1000
|
然后执行run程序
[root@node1ycsb-hbase10-binding-0.10.0]# bin/ycsb run hbase10 -Pworkloads/workloada -cp /usr/hdp/2.4.2.0-258/hbase/conf/ -p table=usertable -pcolumnfamily=family -s –threads 10 -p recordcount=100
Ycsb操作完成结果打印并分析:
[OVERALL], RunTime(ms), 6921.0 数据加载耗时:6.921秒 [OVERALL],吞吐量(ops/sec),144.48779078167894加载操作吞吐量,平均并发数144.48条/秒 [TOTAL_GCS_PS_Scavenge],Count,1.0 [TOTAL_GC_TIME_PS_Scavenge],时间(毫秒),20.0 [TOTAL_GC_TIME_%_PS_Scavenge],时间(%),0.2889755815633579 [TOTAL_GCS_PS_MarkSweep],计数,0.0 [TOTAL_GC_TIME_PS_MarkSweep],时间(毫秒),0.0 [TOTAL_GC_TIME_%_PS_MarkSweep],时间(%),0.0 [TOTAL_GCs],计数,1.0 [TOTAL_GC_TIME], 时间(ms), 20.0 [TOTAL_GC_TIME_%], 时间(%), 0.2889755815633579 [CLEANUP], 操作数, 2.0 清理总数执行的操作,2 [CLEANUP],AverageLatency(us),71591.5 最小响应时间0.015ms [CLEANUP], MaxLatency(us), 143231.0 最大响应时间 143.231ms [CLEANUP],95thPercentileLatency(us),143231.0 95%插入操作延迟 插入操作延迟在 143.231ms 以内 [CLEANUP], 99thPercentileLatency(us), 143231.0 99% 插入操作延迟在 143.231ms 以内 [READ ], 操作数, 480.0 执行读取 总操作数, 480 [READ], AverageLatency(us), 5027.9625 最小响应时间 2.254ms [READ ], MaxLatency(us), 158847.0国家统计局;95% 的读操作延迟在 10.767ms 内 [Read], 99thpercentileLecent (US), 14599.0 99% 的读操作延迟在 14.599ms 内 [Read ], Return= OK,480 成功返回数,480 [更新],操作,520.0最短响应时间 3.302ms [更新],MaxLatency(us),86207.0 95% 的读取操作延迟在 9.991ms 内 [更新],99thpercentilelanetty (US),11839.0 99 %INSERT操作延迟在11.839ms内 [Update ], Return=OK, 520 成功返回数量,520
|
四。用例介绍
这里介绍一下我们使用ycsb进行hbase性能测试时的用例方法。
首先直接使用ycsb_load.sh和ycsb_run.sh两个脚本进行测试。用户只需要自定义一个与工作负载类型类似的配置文件即可。
对应的目录结构:
后缀名为report的文件是脚本运行时所有的终端打印记录, ycsb正在运行(文件较大,测试完成后得到key值可以删除)。
Ycsb_load.sh脚本内容:
echo "* *****加载测试开始***** "
#定义ycsb的路径 YCSB="/root/ycsb- hbase10-binding-0.10.0"
#定义hbase_site.xml的路径 hbase=$YCSB"/bin" < p>#定义测试路径< /p> test=$YCSB"/workloads/test/"
#定义工作负载的文件路径 workload=$test$1
# 定义日志文件名 report=$test$1".report"
# 定义 ycbs 运行程序 runner=$YCSB"/bin/ycsb"
# 定义测量参数 raw_file=$test $1".raw" measurement_param="measurement.raw.output_file="$raw_file < p># 运行测试 $runner加载 hbase10 -cp $hbase -P $workload -s -jvm-args='-Xmx32g' 1>>$report 2>>$report < p>echo "*** ***加载测试结束******”
|
脚本内容比较简单。 ycsb_run.sh脚本的内容几乎与上面(最后一句ycsb run命令中的load改为run),其中$1变量是用户在运行时指定的配置文件(workload、TR1003等)。
-jvm-args='-Xmx32g' 这个用于配置ycsb运行时jvm虚拟机的内存大小。这意味着最多可以分配32G内存给ycsb clinet进程
具体用法:sh ycsb_load.sh TR1003
ycsb配置文件TR1003(与工作负载文件相同)
# 线程数 threadcount=20 p>
# 一条记录的字段数量 p> fieldcount=1
# 每个字段的大小(以字节为单位) fieldlength=9216
将加载#条记录 recordcount=1500000000 < p># 将在运行 parsh 中处理的操作数 operationcount=1500000000 readallfields=true insertorder=hashed< /p> 插入开始=0 insertcount=500000000
#控制hbase操作类型的部分 readproportion=0 updateproportion =0 scanproportion=1 insertproportion=0
# 以下参数始终固定 # 表名 table=usertable
# 列族 columnfamily=cf < /p> # 工作负载类 workload=com.yahoo.ycsb.workloads.CoreWorkload
# 测量类型 measurementtype=raw
clientbuffering=true
writebuffersize=25165824
p> #requestdistribution=zipfian |
该配置文件在加载阶段加载数据库时单独使用,其中clientbuffer配置项是配置hbase客户端的写缓存。配置写入缓存可以减少写入hbase操作时的RPC开销。具体功能可以查看hbase测试调优文档。这是默认情况下未配置。该配置项的默认值为配置项writebuffersize=1024。 *1024*12(12M),requestdistribution指的是操作需求分发所采用的方式。
运行阶段配置文件TR1003:
#线程count threadcount=100
# 一条记录的字段数量 fieldcount=1
# 每个字段的大小(以字节为单位) fieldlength=9216
# 将加载的记录数 # 将加载的记录数 # p> recordcount=1500000000 < p># 操作数量将在 run parsh 中处理 operationcount=2000000 readallfields =true #insertorder=散列 #insertstart=0 #insertcount=500000000
# hbase操作类型的控制部分 readproportion=0 updateproportion=0 scanproportion=1 insertproportion=0
# 以下参数始终固定 #表名 table=usertable
# 列族 columnfamily=cf p> # 工作负载类 workload=com.yahoo.ycsb.workloads.CoreWorkload
# 测量类型 < p>measurementtype=raw
maxscanlength=1000000
#hbase .usepagefilter=false < /p> #scanlengthdistribution=zipfian
#requestdistribution=latest
|
该配置文件用于运行阶段,与ycsb_run.sh配合使用。这里的run阶段主要是从hbase数据库读取数据。
scan:
Maxscanlength配置项用于指定扫描次数(ycsb代码中的实现是取1到Maxscanlength之间的随机值作为扫描次数)
hbase.usepagefilter配置项是扫描的结果是否以页面形式显示。默认启用
scanlengthdistribution配置项m决定如何获取1~Maxscanlength范围内的值。 ,或默认均匀分布(等概率随机分布)。
还值得注意的是,在执行扫描操作时,每秒的ycsb操作数currentops/sec可能会很小:
2016-08-30 04:21: 40:791 60 秒:1 次操作; 0.1 当前操作/秒;预计在 1388 天 21hours 完成 SCAN count: 1, Average Latency(us): 49083737.00
这是由于 ycsb 的计算方法造成的,它只统计了每个操作的具体次数,而不是总数扫描次数,所以0.1可以理解为10秒内进行1次扫描操作,那么这10秒内的平均操作次数就是0.1当前ops/秒。
对于扫描操作,我们可以通过带宽来计算一次操作扫描了多少条数据。
读取:
读取类似于加载阶段的输出,一次搜索一个读取。
注意! ! ! :
负载标准age其实就是加载数据,也就是往hbase中插入数据。工作负载文件中的recordcount 是要插入的记录数。 run阶段是对hbase进行各种操作。 operacount是操作的次数,所以load阶段必须正确执行,否则run阶段会出现类似[READ-FAILED]的错误。
感谢您的阅读!这篇关于《如何安装HBase性能测试工具YCSB》的文章就分享到这里了,希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人看到!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何安装HBase性能测试工具YCSB