`

java实现Hbase中的查询:Filter方式

 
阅读更多

http://blog.csdn.net/karen_wang/archive/2011/03/28/6284154.aspx

1、需要的jar包:

commons-codec-1.4.jar

commons-logging-1.0.4.jar

hadoop-0.20.2-core.jar

hbase-0.20.6.jar

log4j-1.2.15.jar

zookeeper-3.2.2.jar

2、已有表结构:

1、表名:scores

2、列族:

course:art

course:math

grade:

  

3、scan 'scores'的内容:

ROW                          COLUMN+CELL                                                                    
 Jerry                       column=course:art, timestamp=1301294630194, value=80                           
 Jerry                       column=course:math, timestamp=1301294630132, value=100                         
 Jerry                       column=grade:, timestamp=1301294630073, value=2                                
 Jim                         column=course:art, timestamp=1301294630363, value=97                           
 Jim                         column=course:math, timestamp=1301294630305, value=100                         
 Jim                         column=grade:, timestamp=1301294630247, value=3                                
 Tom                         column=course:art, timestamp=1301294630015, value=97                           
 Tom                         column=course:math, timestamp=1301294629987, value=87                          
 Tom                         column=grade:, timestamp=1301294629931, value=1

4、代码:

 
view plaincopy to clipboardprint?

    package org.myhbase; 
     
    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.List; 
     
    import org.apache.hadoop.conf.Configuration; 
    import org.apache.hadoop.hbase.HBaseConfiguration; 
    import org.apache.hadoop.hbase.KeyValue; 
    import org.apache.hadoop.hbase.client.Get; 
    import org.apache.hadoop.hbase.client.HTable; 
    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.CompareFilter.CompareOp; 
    import org.apache.hadoop.hbase.io.Cell; 
    import org.apache.hadoop.hbase.util.Bytes; 
     
    public class HBaseBasic03 { 
        private static HBaseConfiguration hbaseConfig=null; 
        static{ 
            Configuration config=new Configuration(); 
            config.set("hbase.zookeeper.quorum","192.168.10.149,192.168.10.44,192.168.10.49"); 
            config.set("hbase.zookeeper.property.clientPort", "2181"); 
            hbaseConfig=new HBaseConfiguration(config); 
        } 
         
        /**
         * get方式,通过rowKey查询
         * @param tablename
         * @param rowKey
         * @throws IOException
         */ 
        public static void selectByRowKey(String tablename,String rowKey) throws IOException{ 
            HTable table=new HTable(hbaseConfig,tablename); 
            Get g = new Get(Bytes.toBytes(rowKey)); 
            Result r=table.get(g); 
            for(KeyValue kv:r.raw()){ 
                System.out.println("column: "+new String(kv.getColumn())); 
                System.out.println("value: "+new String(kv.getValue())); 
            } 
        } 
         
        /**
         * get方式,通过rowKey、column查询
         * @param tablename
         * @param rowKey
         * @param column
         * @throws IOException
         */ 
        public static void selectByRowKeyColumn(String tablename,String rowKey,String column) throws IOException{ 
            HTable table=new HTable(hbaseConfig,tablename); 
            Get g = new Get(Bytes.toBytes(rowKey)); 
            g.addColumn(Bytes.toBytes(column)); 
            Result r=table.get(g); 
            for(KeyValue kv:r.raw()){ 
                System.out.println("column: "+new String(kv.getColumn())); 
                System.out.println("value: "+new String(kv.getValue())); 
            } 
        } 
         
         
        public static void selectByFilter(String tablename,List<String> arr) throws IOException{ 
            HTable table=new HTable(hbaseConfig,tablename); 
            FilterList filterList = new FilterList(); 
            Scan s1 = new Scan(); 
            for(String v:arr){ // 各个条件之间是“与”的关系 
                String [] s=v.split(","); 
                filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes(s[0]), 
                                                                 Bytes.toBytes(s[1]), 
                                                                 CompareOp.EQUAL,Bytes.toBytes(s[2]) 
                                                                 ) 
                ); 
                // 添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回 
    //          s1.addColumn(Bytes.toBytes(s[0]), Bytes.toBytes(s[1])); 
            } 
            s1.setFilter(filterList); 
            ResultScanner ResultScannerFilterList = table.getScanner(s1); 
            for(Result rr=ResultScannerFilterList.next();rr!=null;rr=ResultScannerFilterList.next()){ 
                for(KeyValue kv:rr.list()){ 
                    System.out.println("row : "+new String(kv.getRow())); 
                    System.out.println("column : "+new String(kv.getColumn())); 
                    System.out.println("value : "+new String(kv.getValue())); 
                } 
            } 
        } 
         
        public static void main(String [] args) throws IOException{ 
             
            // 按rowkey查询,查询Tom行的所有cell 
            HBaseBasic03.selectByRowKey("scores","Tom"); 
             
            // 按rokey 和 column 来查询,查询Tom行course列族的所有列值 
            HBaseBasic03.selectByRowKeyColumn("scores","Tom","course"); 
             
            // Filter多条件查询,条件:查询 course列族中art列值为97 ,且 course列族中math列值为100的行 
            List<String> arr=new ArrayList<String>(); 
            arr.add("course,art,97"); 
            arr.add("course,math,100"); 
            HBaseBasic03.selectByFilter("scores",arr); 
             
        } 
         
    }

分享到:
评论

相关推荐

    hbase分页查询实现.pdf

    HBase分页查询实现 HBase作为一个NoSQL数据库,具有高性能、...本文讲解了如何使用Java语言实现HBase的分页查询,并介绍了HBase的配置、HTablePool、获取HBase表、字节数组的转换、Filter和ResultScanner等知识点。

    java-hbase开发包

    5. **过滤器和比较器**:通过使用`Filter`接口,开发者可以实现复杂的数据筛选逻辑,如基于特定条件的查询。同时,`Comparator`接口允许自定义列值的比较规则。 6. **安全性与权限**:Java-HBase开发包也支持HBase...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    新建一个 Java 项目,然后添加相关的 jar 包,包括 hadoop-core-0.20.204.0.jar、hbase-0.90.4.jar、hbase-0.90.4-tests.jar 以及 Hbase 资源包中 lib 目录下的所有 jar 包。 ### 2. 主要程序 下面是一个 Java ...

    hbase java api 访问 查询、分页

    在HBase这个分布式列式数据库中,Java API是开发者常用的一种接口来操作HBase,包括创建表、插入数据、查询数据以及实现分页等操作。本文将深入探讨如何使用HBase Java API进行数据访问和分页查询。 首先,我们要...

    hbase分页查询实现[归类].pdf

    本文将讲解如何使用Java语言实现HBase的分页查询。 一、HBase概述 HBase是一个基于Hadoop的分布式数据库,它提供了高效的数据存储和检索能力。HBase可以处理大量的数据,支持高并发的读写操作,并且具有很高的可...

    HBase轻量级中间件simplehbase.zip

     hbase query封装:封装了hbase的filter,可以使用sql-like的方式操作hbase。  动态query封装:类似于myibatis,可以使用xml配置动态语句查询hbase。    insert,update支持: 建立在hbase的checkAndPut之上。  ...

    hbase-page:hbase 分页

    在HBase这个分布式列式数据库中,分页查询是一个重要的功能,尤其对于处理大量数据时,它能够有效地提高性能并优化用户体验。HBase本身并不直接支持像SQL那样的传统分页,但通过一些策略和工具,我们可以实现类似的...

    hbase0.94java源代码

    5. 数据模型和数据访问层:包括RowKey设计、过滤器(Filter)和Scanners,用于高效查询和数据过滤。 6. RPC框架:用于处理客户端请求,实现分布式通信。 通过深入学习HBase 0.94的源代码,开发者可以了解到如何...

    java操作Hbase之比较过滤器RowFilter的使用源码

    在Java中操作HBase,过滤数据是至关重要的任务,特别是在处理大数据时,高效地筛选出所需信息能够极大地提升性能。本文将深入探讨HBase的比较过滤器RowFilter的使用源码,帮助你理解如何在实际项目中应用这一关键...

    java api 访问hbase demo(Maven)

    在Java API中访问HBase是大数据处理中常见的一项任务,HBase作为一个分布式、列式存储的NoSQL数据库,常用于海量数据的实时读写。在这个Java API访问HBase的Maven项目中,我们将探讨如何配置项目,引入依赖,以及...

    基于springboot集成hbase过程解析

    SpringBoot集成HBase是当前大数据处理和存储解决方案中的一种常见组合。HBase是基于Hadoop的分布式、可扩展的NoSQL数据库,能够存储大量的结构化和非结构化数据。SpringBoot则是一个基于Java的现代Web框架,提供了...

    java大数据作业_3HBase

    在HBase Shell中,可以使用Filter来过滤查询结果。例如,使用`SingleColumnValueFilter`来过滤特定的列值: ```shell get 'notes', 'rowkey1', {FILTER =&gt; "SingleColumnValueFilter 'meta','title' = 'title1'"} `...

    javaApi_sparkhiveAPI_hbaseAPI.zip

    在IT行业中,Java、Hive、HBase以及Spark是大数据处理和分析领域的重要工具。本压缩包"javaApi_sparkhiveAPI_hbaseAPI.zip"包含了2019年8月至10月期间针对这些技术的Java版API实现,以及与Spark相关的Hive和HBase ...

    HBase使用的jar包

    对于明细查询,HBase提供了多种查询方式,如Get、Scan等,可以根据具体需求选择合适的API。Get操作用于获取单行数据,而Scan则可以用来批量扫描表中的多行数据。 在使用HBase进行查询时,我们还需要关注性能优化。...

    hbase-hadoop+database系统入门书籍

    - **高级功能**:HBase还提供了更多的高级功能,如过滤器(Filter)、批量操作(Batch)、观察者(Observer)等。 ### 面向的目标受众 该教程主要面向以下几类人群: - **希望从事大数据分析领域的专业人士**:包括软件...

    Hbase Java API

    HBase Java API HBase 是 Hadoop 的数据库,能够对大数据提供随机、实时读写访问。他是开源的,分布式的,多版本的,面向列的,存储模型。HBase 的整体结构主要包括 HBase Master、HRegion 服务器和 HRegion Server...

    Hbase实验报告.pdf

    查询HBase中的数据通常使用`get`命令。例如,查询“zhangsan”的地址: ```shell get 'student', 'zhangsan', 'info:address' ``` 查询“lisi”的“Hadoop”成绩: ```shell get 'student', 'lisi', 'info:Hadoop' `...

    hbase jar包.zip

    接着,jackson-databind-2.12.4.jar是Jackson JSON库的数据绑定模块,它允许将JSON对象映射到Java对象,反之亦然,这对于HBase中的数据序列化和反序列化至关重要。同时,jackson-core-2.12.4.jar是Jackson库的基础...

    hbase资料api

    HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据。HTable提供了get方法来完成单条查询。Get对象包含了一个Get查询需要的信息,它的构造方法有两种:...

Global site tag (gtag.js) - Google Analytics