采用YCSB对Hbase进行性能测试

2 篇文章 0 订阅
2 篇文章 0 订阅

参考博客:http://blog.csdn.net/bryce123phy/article/details/51254235

                 https://zhuanlan.zhihu.com/p/29370650

上一篇对大数据平台基准测试结合其他博客作了一个总结,这两天需要对hbase进行性能测试,这里也对雅虎的YCSB作一下自己的总结。

1、YCSB介绍

YCSB,全称为“Yahoo!Cloud Serving Benchmark”。是雅虎开发的用来对云服务进行基础测试的工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。在运行YCSB的时候,可以配置不同的workload和DB,也可以指定线程数&并发数等其他参数。

此外ycsb的workloads/目录下保存了6种不同的workload类型,代表了不同的压测负载类型,详细的介绍列在下面:
workloada:混合了50%的读和50%的写;
workloadb:Read mostly workload,混合了95%的读和5%的写,该workload侧重于测试集群的读能力;
workloadc:Read only,100%只读;
workloadd:Read latest workload,插入数据,接着就读取这些新插入的数据;
workloade:Short ranges,短范围scan,不同于随机读,每个测试线程都会去scan一段数据;
workloadf:Read-modiy-wirte,读改写,客户端读出一个记录,修改它并将被修改的记录返回;

2、YCSB工具的下载,安装

下载链接:https://github.com/brianfrankcooper/YCSB/releases/download/0.12.0/ycsb-0.12.0.tar.gz

相关wiki文档:https://github.com/brianfrankcooper/YCSB/wiki

这个下载下来的直接解压就可以使用,应该是编译好的。

3、使用前的一些错误排查

运行ycsb命令,出现如下报错:

[ERROR] argparse not found. Try installing it via "pip".

说明:报错缺少argparse包,建议通过pip方式安装。

argparse是Python用于解析命令行参数和选型的标准模块,用于替代已过时的optparse模块。

由于这里我机器没有安装pip,所以需要先安装pip:

wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate

python get-pip.py

pip install argparse

4、执行ycsb命令测试hbase性能

①在hbase shell中创建表:


②进行YCSB安装目录的bin目录;

使用load初始化Hbase表数据(20万条)

./ycsb load hbase10 -P../workloads/workloada -p threads=10 -cp /etc/hbase/conf -p table=usertable -p columnfamily=f1 -p recordcount=200000 -s > ./load.report

解释:db 这里ycsb里支持的hbase数据库为hbase10;
-p:是传入的参数;
-cp 参数为hbase的一些配置文件路径,也可以拷贝到ycsb安装目录的对应位置;
threads:YCSB客户端的线程数。可选地,这可以在命令行指定(默认:1);
table:是hbase表的名称;
columnfamily:是hbase表的列族;
recordcount:装载进数据库的初始记录数;
fieldcount:一条记录中的字段数(默认:10);
fieldlength:每个字段的大小(默认:100);

-s  打印测试报告信息到终端或存储到某个目录;

运行过程中会有一个WARN,可以忽略,如想解决,可以看文章开头参考的博客。

18/03/09 10:46:39 INFO zookeeper.ZooKeeper: Client environment:user.name=root
18/03/09 10:46:39 INFO zookeeper.ZooKeeper: Client environment:user.home=/root
18/03/09 10:46:39 INFO zookeeper.ZooKeeper: Client environment:user.dir=/opt/software/ycsb-0.12.0/bin
18/03/09 10:46:39 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=cdh-agent2:2181,cdh-agent4:2181,cdh-agent3:2181 sessionTimeout=60000 watcher=hconnection-0x668863810x0, quorum=cdh-agent2:2181,cdh-agent4:2181,cdh-agent3:2181, baseZNode=/hbase
18/03/09 10:46:39 INFO zookeeper.ClientCnxn: Opening socket connection to server cdh-agent2/10.0.2.163:2181. Will not attempt to authenticate using SASL (unknown error)
18/03/09 10:46:39 INFO zookeeper.ClientCnxn: Socket connection established to cdh-agent2/10.0.2.163:2181, initiating session
18/03/09 10:46:39 INFO zookeeper.ClientCnxn: Session establishment complete on server cdh-agent2/10.0.2.163:2181, sessionid = 0x2620888dc5f004a, negotiated timeout = 60000
18/03/09 10:46:39 WARN util.DynamicClassLoader: Failed to identify the fs of dir hdfs://cdh-agent1:8020/hbase/lib, ignored
java.io.IOException: No FileSystem for scheme: hdfs
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2579)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2586)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:89)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2625)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2607)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:368)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
        at org.apache.hadoop.hbase.util.DynamicClassLoader.<init>(DynamicClassLoader.java:104)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:232)
        at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64)
        at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75)
        at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:833)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:623)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
        at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
        at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
        at com.yahoo.ycsb.db.HBaseClient10.init(HBaseClient10.java:149)
        at com.yahoo.ycsb.DBWrapper.init(DBWrapper.java:99)
        at com.yahoo.ycsb.ClientThread.run(Client.java:418)
        at java.lang.Thread.run(Thread.java:745)
DBWrapper: report latency for each error is false and specific error codes to track for latency are: []
2018-03-09 10:46:49:272 10 sec: 4601 operations; 460.1 current ops/sec; est completion in 12 seconds [INSERT: Count=4602, Max=141183, Min=1240, Avg=1941.06, 90=2747, 99=4231, 99.9=7039, 99.99=141183] 
18/03/09 10:46:55 INFO client.ConnectionManager$HConnectionImplementation: Closing master protocol: MasterService
18/03/09 10:46:55 INFO client.ConnectionManager$HConnectionImplementation: Closing zookeeper sessionid=0x2620888dc5f004a
18/03/09 10:46:55 INFO zookeeper.ZooKeeper: Session: 0x2620888dc5f004a closed
18/03/09 10:46:55 INFO zookeeper.ClientCnxn: EventThread shut down
2018-03-09 10:46:55:495 16 sec: 10000 operations; 867.59 current ops/sec; [CLEANUP: Count=2, Max=113151, Min=7, Avg=56563.5, 90=113151, 99=113151, 99.9=113151, 99.99=113151] [INSERT: Count=5398, Max=11591, Min=763, Avg=1113.9, 90=1286, 99=1680, 99.9=4871, 99.99=8103] 

运行run进行负载测试

./ycsb run hbase10 -P ../workloads/workloada-p threads=10 -cp /etc/hbase/conf -p table=usertable -p columnfamily=f1 -s >./run.report

④查看测试结果报告,验证hbase性能;



⑤报告含义

1.测试报告内容包括处理请求的总时间(Runtime),请求的吞吐量(Throughput),表示每秒钟可处理的请求个数,平均延时(AverageLatency),单位是us,95%的操作延时和99%的操作延时,单位都是us。此外还包括了GC相关的一些metrics。

2.关于前面的CLEANUP和INSERT,这里做个说明,insert代表的是用于压测的客户端发往集群的请求,所以insert标示的metrics代表了对集群性能的真实度量,而cleanup表示的是客户端的一些现场清理工作,比如每个客户端线程在读写完hbase之后,都需要断开到zk的连接等等,所以CLEANUP标示的metrics不需要过多关注。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值