zoukankan      html  css  js  c++  java
  • YCSB之HBase性能测试

    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

    image

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

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

    image

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

    • 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中压力测试场景,文件和相应场景的对应关系如下:

    image

    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的内容,看下其内容如下:

    image

    image

    • 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'

    image

    (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=10 -p table=usertable -p columnfamily=family -p recordcount=10000 -s > logs/load.log
    (或 bin/ycsb load hbase10 -P workloads/workloada -p threads=10 -p table=usertable -p columnfamily=family -p recordcount=10000 )

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

    image

    image

    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的平均延时。

    image

    image 

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

    image

    参考资料(依次递减):

    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

  • 相关阅读:
    线程(C++11)
    初始化、赋值
    优质学习资料总结
    移植之乱谈
    采集音频和摄像头视频并实时H264编码及AAC编码
    H264解码器源码(Android 1.6 版)
    移植ffmpeg到VC环境心得
    收集的网络上大型的开源图像处理软件代码(提供下载链接)
    C++开源库,欢迎补充。
    一个轻量级AOP的实现(开源)
  • 原文地址:https://www.cnblogs.com/zhangwuji/p/9156609.html
Copyright © 2011-2022 走看看