Java進行Hbase查詢


Hbase存儲結構和查詢方式已經有所了解,如何調用連接並且進行數據查詢呢,可以使用jmeter的Java腳本進行操作.
Hbase查詢主要是scaner通過濾器filter進行操作,根據要查詢列族還是rowkey可分為多種filter,可根據具體條件來進行查詢,放個filter比較全的鏈接,有興趣可以參考:https://www.jianshu.com/p/bcc54f63abe4
以下為代碼,包括rowkey前綴模糊查詢+列前綴模糊查詢+值范圍查詢等幾個組合查詢,多個filter可以放到一個list里,單個filter查詢拆出來使用即可:

package hbasetest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
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;
import org.apache.logging.log4j.Logger;

import hbase.HbaseTable;

public class ValueRange extends AbstractJavaSamplerClient {

        public Connection connection;

        public Arguments getDefaultParameters() {
                Arguments args = new Arguments();
                //數據僅為示例,需要根據實際情況添加
                args.addArgument("hbase.zookeeper.quorum", "192.168.1.1,192.168.1.2,192.168.1.3");
                args.addArgument("hbase.zookeeper.property.clientPort","2020");
                args.addArgument("zookeeper.znode.parent","/hbase-unsecure");
                args.addArgument("hbase.master", "hbasetest.com:16000");
                args.addArgument("TableName","P_test");
                args.addArgument("family","info");
                args.addArgument("column","Str");
                args.addArgument("value","7A");
                args.addArgument("rowkey","BH");
                args.addArgument("range","HXMFNQFOTXW9024ZJ");
                return args;
        }

        public void setupTest(JavaSamplerContext context)
        {
                Configuration conf = HBaseConfiguration.create();
                conf.set("hbase.zookeeper.quorum", context.getParameter("hbase.zookeeper.quorum"));
                conf.set("hbase.zookeeper.property.clientPort", context.getParameter("hbase.zookeeper.property.clientPort"));
                conf.set("zookeeper.znode.parent", context.getParameter("zookeeper.znode.parent"));
                conf.set("hbase.master", context.getParameter("hbase.master"));
                try {
                         connection = ConnectionFactory.createConnection(conf);
                } catch (IOException e) {

                        e.printStackTrace();
                }
        }
        @SuppressWarnings("finally")
        public  SampleResult runTest(JavaSamplerContext arg0) {
                // TODO 自動生成的方法存根
                SampleResult sr = new SampleResult();

                try {
                        String tableName = arg0.getParameter("TableName");
                        if (StringUtils.isBlank(tableName)) {
                        }

                        Table table =connection.getTable(TableName.valueOf(tableName));
                        Admin admin =connection.getAdmin();

                        if(!admin.isTableAvailable(TableName.valueOf(tableName))){
                      connection.close();
                      sr.setSuccessful(false);
                      return sr;
                    }
                        Scan scan = new Scan();
                        scan.setCaching(60000);
                        List<Filter> lf = new ArrayList<Filter>();

            //1.rowkey前綴模糊查詢+列前綴模糊查詢
            Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(arg0.getParameter("rowkey").getBytes()));
            Filter filter1 = new ColumnPrefixFilter(arg0.getParameter("column").getBytes());

            //2.rowkey前綴模糊查詢+列前綴模糊查詢+值范圍查詢
            //Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(arg0.getParameter("rowkey").getBytes()));
            //Filter filter1 = new ColumnPrefixFilter(arg0.getParameter("column").getBytes());
            //Filter filter2 = new SingleColumnValueFilter(arg0.getParameter("family").getBytes(), Bytes.toBytes("Str"), CompareFilter.CompareOp.GREATER_OR_EQUAL, arg0.getParameter("range").getBytes());

            //3.rowkey前綴模糊查詢+值范圍查詢
            //Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(arg0.getParameter("rowkey").getBytes()));
            //Filter filter1 = new SingleColumnValueFilter(arg0.getParameter("family").getBytes(), Bytes.toBytes("Str"), CompareFilter.CompareOp.GREATER_OR_EQUAL, arg0.getParameter("range").getBytes());

            //4.列前綴模糊查詢+值范圍查詢
            //Filter filter = new ColumnPrefixFilter(arg0.getParameter("column").getBytes());
            //Filter filter1 = new SingleColumnValueFilter(arg0.getParameter("family").getBytes(), Bytes.toBytes("Str"), CompareFilter.CompareOp.GREATER_OR_EQUAL, arg0.getParameter("range").getBytes());
                        lf.add(filter);
                        lf.add(filter1);
                        //lf.add(filter2);

                        FilterList fl = new FilterList(lf);
                        sr.sampleStart();
                        scan.setFilter(fl);
                        ResultScanner scanner = table.getScanner(scan);
                        sr.sampleEnd();
                        sr.setSuccessful(true);
                } catch (Exception e) {
                        e.printStackTrace();
                        sr.setSuccessful(false);
                }
                finally {
                        return sr;
                }
        }

}

可使用Hbase的Ambari進行監控服務器資源,包括cpu,io,內存以及Hbase的磁盤HDFS等:
在這里插入圖片描述
該工具還支持圖表按照時間范圍展示:
在這里插入圖片描述
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM