如何安装HBase性能测试工具YCSB

分类:编程技术 时间:2024-02-20 15:54 浏览:0 评论:0
0
本文将与大家分享如何安装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

[信息] ------------------------------------------------------ ---------------------------------

[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预分区及建表

使用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.(DynamicClassLoader.java:104)

位于 org.apache.hadoop.hbase.protobuf.ProtobufUtil.(ProtobufUtil.java:232)

位于 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.(ConnectionManager.java: 623)

在 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 秒

[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操作完成结果打印并分析:

< /tbody>

[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两个脚本进行测试。用户只需要自定义一个与工作负载类型类似的配置文件即可。

对应的目录结构:

[root@node5 测试]# pwd

/root/ycsb-hbase10-binding-0.10.0/workloads/test

[root@node5 test]# ll

总计 4338592

-rw- r--r-- 1 root hadoop 1189 Aug 27 22:35 TR1003

-rw-r--r-- 1 root hadoop 4080039015 Aug 29 03:12 TR1003.report

-rw-r--r-- 1 root hadoop 800 Aug 30 16:20 TR1004

-rw-r--r-- 1 root hadoop 306542869 Aug 30 16:31 TR1004.report

-rw-r--r-- 1 root hadoop 751 Aug 30 10:06 TR1005

-rw-r--r-- 1 root hadoop 56106292 8月30日10:20 TR1005 .report

-rw-r--r-- 1 root hadoop 631 8月23日19:07工作负载_test_template

-rwxr-xr-x 1 root hadoop 590 8月23日17:52 ycsb_load.sh

-rwxr-xr-x 1 root hadoop 609 Aug 30 16:35 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

# 一条记录的字段数量

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

# 工作负载类

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》的文章就分享到这里了,希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人看到!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何安装HBase性能测试工具YCSB

用户评论