1、YCSB背景

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

2、初探

首先在官网上下载源码编译或者直接下载软件包:https://github.com/brianfrankcooper/YCSB/releases/tag/0.10.0

(编译的话需要maven工程和其他资源包的依赖比较麻烦,建议直接下载软件包,解压后进行简单的操作(下文介绍)后就能直接用。)

下载压缩包后上传到对应的主机,解压tar –xvf ycsb-0.12.0.tar.gz后的文件夹内目录结构如下:

所有文件可以分为以下几种类型:

  • bin,logs,lib,LICENSENSE.txt

是一般软件安装后都有的,作用不赘述

  • 红框中的目录:

命名规则均为NOSQL数据库名+’-binding’后缀。这些目录也即表示了YCSB支持的所有的NOSQL数据库类型,同时你也可以按照规范加入新的数据库类型。每个bindings目录内部都有lib子目录,用于存放YCSB对访问这些数据库所需要的一些jar包依赖。将$HBASE_HOME/lib目录下的所有jar包拷贝到$YCSB_HOME/hbase10-binding/lib中(lib文件夹本身存在,直接进行复制拷贝即可),同时将$HBASE_HOME/conf/hbase-site.xml拷贝到$YCSB_HOME/hbase10-binding/conf中(conf文件夹自己创建),这样就算安装成功了。

  • workloads目录

里面包含一些压力测试的场景文件。YCSB自带了6中压力测试场景,文件和相应场景的对应关系如下:

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,读改写,客户端读出一个记录,修改它并将被修改的记录返回;

【workload文件说明】

这里给出文件workloada的内容,看下其内容如下:

  • recordcound 是YCSB load(加载元数据)命令的参数,默认值1000表示默认加载的记录条数,可以在命令行显示修改该值(后面介绍)。
  • Operationcount 是YCSB run(运行压力测试)命令的参数,默认值1000表示默认选取数据库中的1000条数据进行压力测试。对于workloada这种测试场景,就意味着读数据在500左右,写数据也在500左右
  • workload 指定了workload的实现类为 com.yahoo.ycsb.workloads.CoreWorkload
  • readallfields表示查询时是否读取记录的所有字段
  • readproportion表示读操作的比例,该场景为0.5
  • updateproportion表示更新操作的比例,该场景为0.5
  • scanproportion表示扫描操作的比例
  • Insertproportion表示插入操作的比例
  • Requestdistribution表示请求的分布模式,YCSB提供uniform, zipfian, latest三种分布模式

更多的参数含义可参考:https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads。据此可以定制自己的压力测试场景。

3、压力测试流程

3.1环境初始化:

(1) 创建测试数据表
使用hbase shell命令创建测试数据表usertable,列簇family

create 'usertable', 'family'

(2) 将hbase依赖的lib的文件拷贝到相应的-bing文件中(我这里是hbase10-binding/lib)【前面也已介绍】
(3) 将hbase配置文件拷贝到ycsb中。在$YCSB_HOME/hbase10-binding中新建conf目录,并将$HBASE_HOME/conf/hbase-site.xml 拷贝到$YCSB_HOME/hbase10-binding/conf/中【前面也已介绍】

3.2加载数据:
切换到$ YCSB_HOME目录,执行以下命令,加载1,000,000条记录:

bin/ycsb load hbase10 -P workloads/workloada -p threads= -p table=usertable -p columnfamily=family -p recordcount= -s > logs/load.log
(或 bin/ycsb load hbase10 -P workloads/workloada -p threads= -p table=usertable -p columnfamily=family -p recordcount= )

参数解释如下:
load 表示这是一次加载数据操作;
hbase10指明了所用的数据库类型;
-P指明了所用的配置文件的路径;
-p 可以显示修改YCSB内置的默认配置,例如这里配置recordcount=10000来覆盖之前说过的workloada中默认的recordcount=1000;
-s一次加载数据或执行测试的过程实践很长,YCSB客户端需要定时(默认10s)发送状态信息;> logs/load.log表示结果日志写入位置(若没有logs文件夹就自己新建一个,也可以不加此参数,则运行结果直接打印到屏幕上);

3.3执行测试
以workloada测试场景为例,切换到$ YCSB_HOME目录,执行以下命令进行压力测试

bin/ycsb run hbase10 -P workloads/workloada -threads 10 -p operationcount=1000000 -p table=usertable -p columnfamily=family -p measurementtype=timeseries -p timeseries.granularity=2000 -s > logs/transaction-workloadAA.log

参数解释如下:
-threads 10配置了并发线程个数
-p operationcount=1000000 覆盖了workloada中operationcount=1000表示本次测试操作记录数为1000000
-p measurementtype=timeseries -p timeseries.granularity=2000指明了YCSB客户端多长时间汇总一次延时,timeseries.granularity属性值的单位为1000milliseconds。所以这里的配置就表示2000s记录一次本2000s的平均延时。

测试运行结果的各属性含义相关说明如下:

参考资料(依次递减):

https://blog.csdn.net/zhangchen2449/article/details/53126884

https://blog.csdn.net/zx8167107/article/details/78753283

https://blog.csdn.net/Fighingbigdata/article/details/79495251

https://wenku.baidu.com/view/65a07ac5a0c7aa00b52acfc789eb172ded6399b8.html

https://blog.csdn.net/hustsselbj/article/details/46540377

https://blog.csdn.net/huoyunshen88/article/details/38299481

https://wenku.baidu.com/view/b8363464284ac850ac0242b3.html

YCSB之HBase性能测试的更多相关文章

  1. ycsb对hbase性能测试的研究

    ycsb对hbase性能测试 1.ycsb安装 下载ycsb软件 wget https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4. ...

  2. YCSB测试HBase远程完全分布式集群

    写在前面 本文只讲一个很简单的问题,YCSB对HBase集群的测试.虽然网上有很多介绍YCSB测试HBase的文章,但都是针对本地HBase伪分布式集群的.大家都知道,稍微正式一些的压测都会要求测试客 ...

  3. HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较

    摘要:   在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...

  4. ycsb 测试Hbase性能

    下载 github:https://github.com/brianfrankcooper/YCSB/releases/tag/0.10.0 wget https://github.com/brian ...

  5. 雅虎(ycsb)测试hbase(压测)

    一.下载ycsb 0.10包 https://github.com/brianfrankcooper/YCSB/releases/download/0.10.0/ycsb-0.10.0.tar.gz ...

  6. HBase性能测试

    hbase org.apache.hadoop.hbase.PerformanceEvaluationUsage: java org.apache.hadoop.hbase.PerformanceEv ...

  7. NoSQL性能测试工具YCSB-Running a Workload

    写在前面 目前,在系统设计中引入了越来越多的NoSQL产品,例如Redis/ MongoDB/ HBase等,其中性能指标往往会成为权衡不同NoSQL产品的关键因素.对这些产品在性能表现和产品选择上的 ...

  8. 使用ycsb对hbase0.94.11 benchmark

    Ycsb下载地址:https://github.com/brianfrankcooper/YCSB/releases 目前测试hbase0.94.11,因此下载ycsb-0.1.4.tar.gz 1. ...

  9. 公司HBase基准性能测试之准备篇

    本次测试主要评估线上HBase的整体性能,量化当前HBase的性能指标,对各种场景下HBase性能表现进行评估,为业务应用提供参考. 测试环境 测试环境包括测试过程中HBase集群的拓扑结构.以及需要 ...

随机推荐

  1. 032、学容器必须懂bridge网络(2019-02-19 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7066851.html   docker安装时会创建一个名为 docker0 的linuxbridge.如果不指定 --n ...

  2. 深入浅出mybatis之与spring集成

    目录 写在前面 详细配置 1.dataSource(数据源) 2.sqlSessionFactory(Session工厂) 3.Mapper(映射器) 4.TransactionManager(事务管 ...

  3. 通过WifI开发调试Android设备

    前言:使用的windows系统,为了可以通过wifi可以直接连接android设备调试,尝试使用以下方法一.使用ADB USB to WIFI 一直不成功. 二.使用命令行方式 1.进入android ...

  4. GCC编译器原理(二)------编译原理一:ELF文件(3)

    4.5 String Table:字符串表 字符串表节区包含以 NULL( ASCII 码 0) 结尾的字符序列, 通常称为字符串. ELF 目标文件通常使用字符串来表示符号和节区名称. 对字符串的引 ...

  5. GCC编译器原理(一)04------GCC 工具:nlmconv、nm、objcopy、objdump和 ranlib

    1.3.13 nlmconv nlmconv 将可重定位的对象文件(Infile)转换为 NetWare 可加载模块(outfile),并可选择读取头文件信息获取 NLM 头信息. 选项,描述 -I ...

  6. bzoj 1531 Bank notes 多重背包/单调队列

    多重背包二进制优化终于写了一次,注意j的边界条件啊,疯狂RE(还是自己太菜了啊啊)最辣的辣鸡 #include<bits/stdc++.h> using namespace std; in ...

  7. rabbitMQ学习1:消息队列介绍与rabbitmq安装使用

    1. 什么是消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻烦,很慢,效率很低 但是如果有了邮箱, 邮件直接丢给邮箱,用 ...

  8. Python 中的比较:is 与 ==

    转载: https://www.cnblogs.com/kiko0o0/p/8135184.html 在 Python 中会用到对象之间比较,可以用 ==,也可以用 is .但是它们的区别是什么呢? ...

  9. 解释局域(LAN)和广域网(WAN)之间的区别,它们之间的关系是什么?

    解释局域(LAN)和广域网(WAN)之间的区别,它们之间的关系是什么?

  10. android PopupWindow 显示问题

    设置可点击,其余控件也可点击,等操作 setOutsideTouchable(true);   setBackgroundDrawable(new BitmapDrawable()); setTouc ...