package com.embracesource.hbase.jmeter; import java.io.IOException; import java.util.Random; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; 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; public class JMeterTest extends AbstractJavaSamplerClient { private HTableInterface table; private static Configuration conf = null; private Put put = null ; private Get get= null ; /*测试的方法*/ private String methedType = null ; /*key取值长度*/ private int keyNumLength = 0 ; /*列族数组*/ private String[] cfs = null ; /*列数组*/ private String[] qualifiers = null ; /*value值*/ private String values =null ; /*是否记录日志*/ private boolean writeToWAL = true ; /** * 初始化配置 */ static { conf = HBaseConfiguration.create(); } @Override public void setupTest(JavaSamplerContext context) { super.setupTest(context); if (table == null) { String tableName = context.getParameter("tableName"); byte[] tableNamebyte = tableName.getBytes(); boolean autoFlush = Boolean.valueOf(context.getParameter("autoFlush")); long writeBufferSize = Long.valueOf(context.getParameter("writeBufferSize")); int poolSize = Integer.parseInt(context.getParameter("poolSize")); try { table = JMeterHTablePool.getinstancePool(conf,poolSize,tableNamebyte,autoFlush,writeBufferSize).tablePool.getTable(tableName); } catch (Exception e) { System.out.println("htable pool error"); } } if( methedType == null ){ methedType = context.getParameter("putOrget"); } if( keyNumLength == 0){ keyNumLength = Integer.parseInt(context.getParameter("keyNumLength")); } if(cfs == null){ String cf = context.getParameter("cf"); cfs = cf.split(","); } if( qualifiers == null ){ String qualifier = context.getParameter("qualifier"); qualifiers = qualifier.split(","); } if( values == null ){ String valueLength = context.getParameter("valueLength"); values = Strings.repeat('v', Integer.parseInt(valueLength)); } if( writeToWAL == true ){ writeToWAL = Boolean.valueOf(context.getParameter("writeToWAL")); } } public SampleResult runTest(JavaSamplerContext context) { SampleResult sampleResult = new SampleResult(); sampleResult.sampleStart(); String key = String.valueOf(String.valueOf(new Random().nextInt(keyNumLength)).hashCode()); try { if (methedType.equals("put")) { put = new Put(Bytes.toBytes(key)); put.setWriteToWAL(writeToWAL); for (int j = 0; j < cfs.length; j++) { for (int n = 0; n < qualifiers.length; n++) { put.add(Bytes.toBytes(cfs[j]), Bytes.toBytes(qualifiers[n]), Bytes.toBytes(values)); table.put(put); } } } else if (methedType.equals("get")) { get = new Get((key ).getBytes()); table.get(get); // Result rs = table.get(get); } sampleResult.setSuccessful(true); } catch (Throwable e) { sampleResult.setSuccessful(false); } finally { sampleResult.sampleEnd(); } // // 返回是否处理成功 return sampleResult; } @Override public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("putOrget", "put"); params.addArgument("keyNumLength", "5"); params.addArgument("valueLength", "1000"); params.addArgument("cf", "cf"); params.addArgument("qualifier", "a"); params.addArgument("tableName","test"); params.addArgument("autoFlush","false"); params.addArgument("writeBufferSize","2097152"); params.addArgument("writeToWAL","true"); params.addArgument("poolSize","500"); return params; } @Override public void teardownTest(JavaSamplerContext context) { super.teardownTest(context); try { if (table != null) { table.flushCommits(); table.close(); table = null ; } } catch (IOException e) { System.out.println("teardown error"); } } public static void main(String[] args){ for(int i = 0 ; i<100;i++){ String key = null ; key = String.valueOf(String.valueOf(new Random().nextInt(1000000)).hashCode()); System.out.println(key); } } }