Java进行Hbase查询

news/2024/5/20 5:09:34 标签: hbase, hadoop, 大数据, hdfs, java

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


http://www.niftyadmin.cn/n/1325918.html

相关文章

字节跳动大裁员,测试工程师差点遭团灭:大厂招人背后的套路,有多可怕?

“字节跳动将开启1075模式”悄悄登上了热搜&#xff01; 1075模式&#xff0c;也就是早上10点上班&#xff0c;下午7点下班&#xff0c;每周工作5天&#xff1b; 工作日7点后加班需提交申请&#xff0c;要有加班理由&#xff0c;要经领导同意&#xff0c;每天最多加班3小时&a…

游戏测试相关 测试一个英雄的技能(春招被问比较多的一道题)

首先呢&#xff0c;春招猛冲了一大堆测试岗位&#xff0c;其中包括游戏测试工程师这个在测试岗里面也算是比较特殊的岗位吧。 记录一下春招被问的比较多的一个问题&#xff0c;“如何测试一个英雄的技能”。 这个问题其实归根到底和软件测试里面针对某个特定物体的测试是同个…

orm 通过外链表查找数据_码哥聊Python数据结构--链表

前几天我们开了个数据结构的坑&#xff0c;说了栈&#xff0c;留言里有同学提到链表&#xff0c;那今天码哥就来讲讲链表。链表是什么链表、列表&#xff0c;说起来有点相似&#xff0c;作用也有点类似&#xff0c;但可别傻傻分不清楚。我们一般说的列表&#xff0c;是一个连续…

公司测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会&#xff0c;不断提升自己的技能栈成了测试老人迫在眉睫的问题。 不论是面试哪个级别的测试工程师&#xff0c;面试官都会问一句“会编程吗&#xff1f;有没有自动化测试…

Zabbix-agent监控

好久不更新&#xff0c;一口气更新几篇&#xff0c;终于到了我最喜欢的zabbix监控这篇&#xff01; zabbix可以监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff0c;提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。我们知道&#xff0c;zabbix由…

人生苦短我用python壁纸_人生苦短,我用 Python——我如何用 Python 助力工作和生活?...

在生活和工作中&#xff0c;往往充斥着一些枯燥且乏味的事情。所以要让自己从机械地重复性劳动中解放出来&#xff0c;才是解放身心的正确姿势。 本文列举了我自己平时在工作和生活中的七个小场景&#xff0c;每个场景都是带有这样「重复性」性质的事情&#xff0c;一起看看我是…

python创建空文本文件_用python创建文件名,并传入字符串进入文件,达到创建文件...

#! /usr/bin/python在系统中键入文件名并创建空文件&#xff0c;并将字符串写入文件中。 利用%s将字符串传递&#xff0c;并在write函数中使用%s字符串传递&#xff0c; 并将\n使用在其中&#xff0c;write函数中还调用变量file_name raw_input("pls input your file nam…

Zabbix监控JVM

前面已经配置了DISK和NET监控&#xff0c;zabbix还支持JVM监控&#xff0c;都写在一篇文章里会比较乱&#xff0c;没有侧重点&#xff0c;于是便拆开说明&#xff1a; 大致原理如下&#xff1a; 代理端&#xff1a; java-gateway服务 客户端&#xff1a; catalina.sh修改 web端…