测试工具 YCSB 的安装
YCSB介绍:YCSB(Yahoo! Cloud Serving Benchmark)是Yahoo开源的一款通用的性能测试工具。可以用于测试多种 NoSQL 产品进行测试。相关说明可以参考 https://github.com/brianfrankcooper/YCSB/wiki.
YCSB的工作原理如上图所示,主要的模块包括workload和DB Interface:
Workload:通过配置文件,定义读写比例,数据的大小等DB Interface:通过接口连接并操作各种Cloud Serving Store,也就是各种NoSQL产品包括HBase在内。在运行YCSB的时候,可以配置不同的workload和DB interface,同时可以定义线程数等其他参数。
安装方式一:直接下载已经编译过的程序包
下载地址:https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4.tar.gz
解压:tar xfvz ycsb-0.1.4
这种方式简单易用。但对于不同的HBase版本,可能会有问题。需要手工编译安装。
安装方式二:源码编译安装
从github下载源码:git clone https://github.com/brianfrankcooper/YCSB.git
配置相应的HBase的版本:修改YCSB/pom.xml,更新hbase.version这个属性。
编译:cd YCSB, mvn install
生成YCSB的程序包:distribution/target/ ycsb-0.1.4.tar.gz
解压:tar xfvz ycsb-0.1.4
1. 测试步骤
a) 配置HBase连接和classpath
最简单的办法是将HBase Server的配置文件{$HBase_home}/conf/hbase-site.xml直接拷贝到YCSB的目录{$YCSB_HOME}/hbase-binding/conf。
将HBase的jar文件拷贝到{$YCSB_HOME} /hbase-binding/lib,这样当执行ycsb命令时,可以保证所需的jar在classpath上。
b) YCSB命令简介
直接执行ycsb命令,可以看到用法的介绍,主要有3类的参数:
Commands:执行什么命令,load-加载数据,run-运行测试,shell-交互模式;
Databases:使用什么DB Interface;
Options:包括属性参数和线程参数。
https://github.com/brianfrankcooper/YCSB/wiki/Core-Properties
参考以上的链接,可以发现workload的核心属性参数。
c) 加载数据
bin/ycsb load hbase -P workloads/workloada -p columnfamily=f1 -p recordcount=10000 -s -threads 10
向HBase Server下的usertable,f1插入10000条数据,并将执行的情况打印到屏幕上。对于HBase数据库,数据是以字节码数组byte[]的方式进行读取,对于不同的数据源,无论是车牌号这种String类型的,还是电子图片这种Binary类型的,在从HBase数据库读取的时候都是以byte[]类型,不同的是数组的长度。
对于一个“京K12345”的车牌,它的长度是8位,对于一个5M左右的图片,它的长度是2326122。我们可以通过workload的核心属性fieldlength来设置。
d) 性能测试
YCSB自带有6中workload配置文件,模拟不同的压力场景
以上是workloadc的内容,模拟的是100% read操作的场景。
bin/ycsb run hbase -P workloads/workloadc -p columnfamily=f1 -s -threads 10
根据workloadc来进行性能测试。
2. 对工具的定制开发和扩展
以上的介绍都是基于YCSB的自带功能。在有些情况下,我们需要扩展和定制测试的方法,YCSB是开源的纯JAVA的解决方案,可以充分满足特殊的要求。下面分析一下YCSB的相关JAVA Class。
a) Workload的定义: com.yahoo.ycsb.workloads.CoreWorkload
b) HBase DB Interface的定义:com.yahoo.ycsb.db.HBaseClient
c) 数据生成器Generator:com.yahoo.ycsb.generator.*
d) YCSB的主程序:com.yahoo.ycsb.Clien
压力测试参数与说明
测试分成两部分,小数据表和大数据表。所谓的大小表示单条记录的大小,测试中,小数据表的单条记录大小为8Byte,大数据表的单条记录大小为2MB。通过YCSB数据库测试工具,我们对数据库的各种操作进行了压力测试,包括read, insert, update, scan以及read-modify-write。这些测试反映了hadoop hbase的性能,同时也对实际应用的操作
进行了模拟。
操作说明:
Read: 读取某一条记录。速度和系统的io速率有关,系统读取速率越快,read速率越快。
Insert:插入一条记录。速度和系统的io速率有关,系统写入速率越快,read速率越快。
Update:更新一条记录,本质和insert操作相同。
Scan:扫描整个表,速率由读取速率和整个表的大小有关,表越大,单次scan速率越慢。
测试环境:
硬件:
软件:
*注:除非文中特别标注, 其他参数均采用 Apache Hadoop 英特尔分发版 2.3 的缺省参数。
YCSB对Apache Hadoop*英特尔分发版测试结果
在以下测试中,我们通过设置不同的线程数,让YCSB客户端模拟不同的压力情况。