package com.embracesource.jmeter.hbase; 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.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 HbaseJMeter extends AbstractJavaSamplerClient { private HTableInterface table; private static Configuration conf = null; private Put put = null; private Get get = null; private String methedType = null; private int keyNumLength = 0; private String[] cfs = null; private String[] qualifiers = null; private String values = null; private boolean writeToWAL = true; private boolean keyRondom = true; @Override public void setupTest(JavaSamplerContext context) { super.setupTest(context); String hbaseZK = context.getParameter("hbase.zookeeper.quorum"); conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", hbaseZK); conf.set("hbase.ipc.client.tcpnodelay", "true"); conf.set("hbase.client.pause", "20"); conf.set("ipc.ping.interval", "3000"); conf.set("hbase.client.retries.number", "11"); 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")); } if (keyRondom == true) { keyRondom = Boolean.valueOf(context.getParameter("keyRondom")); } } public SampleResult runTest(JavaSamplerContext context) { SampleResult sampleResult = new SampleResult(); sampleResult.sampleStart(); String key = null; if (keyRondom) { key = String.valueOf(String.valueOf(new Random().nextInt(keyNumLength)).hashCode()); } else { key = SequenceKey.getsequenceKey(); } 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); } sampleResult.setSuccessful(true); } catch (Throwable e) { sampleResult.setSuccessful(false); } finally { sampleResult.sampleEnd(); } return sampleResult; } @Override public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("tableName", "test"); params.addArgument("cf", "cf"); params.addArgument("qualifier", "a"); params.addArgument("putOrget", "put"); params.addArgument("keyNumLength", "10000000"); params.addArgument("keyRondom", "true"); params.addArgument("valueLength", "1000"); params.addArgument("autoFlush", "false"); params.addArgument("writeBufferSize", "2097152"); params.addArgument("writeToWAL", "true"); params.addArgument("poolSize", "500"); params .addArgument( "hbase.zookeeper.quorum", "tkpcjk01-12,tkpcjk01-13,tkpcjk01-14,tkpcjk01-15,tkpcjk01-16,tkpcjk01-17,tkpcjk01-18,tkpcjk01-19,tkpcjk01-20,tkpcjk01-21,tkpcjk01-22,tkpcjk01-23,tkpcjk01-24"); 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"); } } }