zoukankan      html  css  js  c++  java
  • JMeter测试HBase

    在网上找了关于jmeter连接hbase的方式,主要分为两种:通过导入jar包连接(Java Request)和通过BeanShell远程连接,由于刚接触jmeter没多久,对BeanShell还不熟,所以打算通过eclipse用Java编写连接hbase的程序并打包成jar包,导入到jmeter的方式连接hbase。

    HBase本地远程连接HBase是测试成功的,一开始采用直接打包成runnable jar的方式导入到jmeter,但是创建Java Request之后,页面查不到创建好的接口,后来网上查询到,需要专门写一个程序继承“AbstractJavaSamplerClient”类,jmeter才能识别。

    1、创建Java工程

    新创建一个Java工程或者在需要调用的工程上创建个类,将ext目录下ApacheJMeter_core.jar、ApacheJMeter_java.jar引入项目(若提示无法找到org/apache/jorphan/logging/LoggingManager接口,需要同时引入lib目录下的jorphan.jar包);

    继承AbstractJavaSamplerClient类,并重写以下方法:

    public Arguments getDefaultParameters();设置可用参数及的默认值;
    public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
    public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
    public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

    具体接口如下:

    package main.jmeter;
    
    import java.io.IOException;
    
    import org.apache.hadoop.hbase.KeyValue;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.jmeter.config.Arguments;
    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;
    
    import main.hbase.HBaseDAO;
    
    public class Create extends AbstractJavaSamplerClient {
        private String tableName = null;//表名
        private String rowkey = null;    //rowkey值
        private SampleResult results;
        
        /**
         * 设置传入参数
         * 可以设置多个,已设置的参数会显示到Jmeter参数列表中
         */
        @Override
        public Arguments getDefaultParameters() {
            Arguments params = new Arguments();
            params.addArgument("tableName","");
            params.addArgument("rowkey","");
            return params;
        }
        
        /**
         * 初始化方法,初始化性能测试时的每个线程
         * 实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法
         */
        @Override
        public void setupTest(JavaSamplerContext context) {
            results = new SampleResult();
            tableName = context.getParameter("tableName");//注意:此处是接收jmeter的参数传入,需要用引号括起来,否则读取不到值
            if(tableName != null && tableName.length() > 0){
                results.setSamplerData(tableName);
            }
            rowkey = context.getParameter("rowkey");
            if(rowkey != null && rowkey.length() > 0){
                results.setSamplerData(rowkey);
            }
        };
        
        /**
         * 性能测试时的线程运行体
         * 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于Loadrunner中的Action方法
         */
        @SuppressWarnings("deprecation")
        @Override
        public SampleResult runTest(JavaSamplerContext arg0) {
            boolean success = false;
            results.sampleStart();
            HBaseDAO hbase = new HBaseDAO();
            HTable table = hbase.getHTable(tableName);
            // getRow 根据rowkey获取所有版本记录
            Result r;
            try {
                r = hbase.getRowVersions(table, rowkey,1);
                KeyValue[] kv = r.raw();
                for(KeyValue value:kv){
                    results.setDataEncoding("UTF-8");
                    results.setResponseData("运行结果 :  value = " + new String(value.getValue()));
                    success = true;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    table.close();
                    results.sampleEnd();
                    results.setSuccessful(success);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return results;
        }
        
         /**
          * 测试结束方法,结束测试中的每个线程
          * 实际运行时,每个线程仅执行一次,在测试方法运行结束后执行,类似于Loadrunner中的End方法
          */
        @Override
        public void teardownTest(JavaSamplerContext arg0) {
            
        }
    
    }

    2、打包并导入

     将编辑好的Java项目打成jar包:Export->JAR file->finish

    将导出的jar包放入libext目录下

    3、运行JMeter

    打开jmeter,点击测试计划将HBase依赖的所有jar包加入环境(建议先拷贝至ext目录下),添加线程组、Java Request

    在类名称中找到自己创建的类,参数列表会自动显示类中自定义的参数,填入要测试的值(可添加CSV配置元件,通过参数方式传入);

    添加察看结果树、聚合报告,看是否能正常运行,若有异常,点击右上角三角符号查看原因

    若遇到java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.异常,是由于找不到hadoop.home.dir的路径;

    我本地运行连接hbase是正常的,但是导入到JMeter之后报个这个异常,我们集群用的是Hadoop 2.6.0,所以从网上下载了个Apache Hadoop Common 2.6.0:https://github.com/amihalik/hadoop-common-2.6.0-bin

    解压到本地,然后在HBase的初始化程序中添加(也可配置环境变量)

    System.setProperty("hadoop.home.dir", "D:\Hadoop\hadoop-common-2.6.0");

    重新打包后运行正常。

  • 相关阅读:
    【复习】数据库维护-索引语法
    C# 以管理员身份运行WinForm程序
    Postgresql死锁处理
    401 Not Authorized For MSDEPLOY‏ (msdeployAgentService)
    GIT使用指南
    redis使用指南
    nginx使用指南
    DB2日常维护常用命令
    AIX常用命令总结
    C语言+嵌入式SQL+DB2开发经验总结
  • 原文地址:https://www.cnblogs.com/grapelet520/p/11134203.html
Copyright © 2011-2022 走看看