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等:
在这里插入图片描述
该工具还支持图表按照时间范围展示:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中,可以使用HBase API进行表根据时间戳范围进行查询。下面是一个简单的示例代码: ```java import java.io.IOException; import java.util.ArrayList; import java.util.List; 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.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; 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.filter.FilterList; import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.filter.TimestampsFilter; import org.apache.hadoop.hbase.util.Bytes; public class HBaseQueryExample { public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); TableName tableName = TableName.valueOf("table_name"); Scan scan = new Scan(); long startTime = System.currentTimeMillis() - 24 * 60 * 60 * 1000; // start time is 24 hours ago long endTime = System.currentTimeMillis(); // end time is current time List<Long> timestamps = new ArrayList<>(); timestamps.add(startTime); timestamps.add(endTime); TimestampsFilter filter = new TimestampsFilter(timestamps); SingleColumnValueFilter columnFilter = new SingleColumnValueFilter(Bytes.toBytes("column_family"), Bytes.toBytes("column_qualifier"), CompareOperator.EQUAL, Bytes.toBytes("column_value")); FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); filterList.addFilter(filter); filterList.addFilter(columnFilter); scan.setFilter(filterList); ResultScanner scanner = conn.getTable(tableName).getScanner(scan); for (Result result : scanner) { for (Cell cell : result.listCells()) { byte[] valueBytes = CellUtil.cloneValue(cell); String value = Bytes.toString(valueBytes); System.out.println("Value: " + value); } } scanner.close(); conn.close(); } } ``` 在上面的代码中,我们首先创建了一个HBase连接和一个表名。然后,我们使用Scan对象创建一个查询,并设置起始时间和结束时间。接下来,我们使用TimestampsFilter和SingleColumnValueFilter创建一个过滤器列表FilterList,以仅返回指定时间范围内的包含指定列的行。最后,我们使用ResultScanner遍历结果并打印每个包含指定列的单元格的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fancy橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值