`

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分页查询实现

    实现HBase分页查询的思路是使用Scan对象来扫描表中的数据,然后使用Filter来过滤数据,最后使用ResultScanner来获取结果集。在实现过程中,我们需要注意的一点是,每次Scan操作都需要指定开始行和结束行,以便实现...

    HBase轻量级中间件simplehbase.zip

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

    hbase orm simplehbase v1.0

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

    Hbase中文文档

    2.9. Bloom Filter 3. 升级 3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据模型 5.1. 概念视图 5.2. 物理视图 5.3. 表 ...

    FilterOfFilterList.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    HbaseGUI:Hbase图形用户界面

    提供可视化查询、元数据管理和支持预分区建表三大功能特点响应式设计Hbase数据/操作可视化提供包括Rowkey、版本号、Scan时间和各类Filter在内的高级查询提供元数据管理提供命名空间管理创建表时支持通过设置起止...

    PreFixFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    M2-nosql:HMIN 313-NoSQL

    Nosql HMIN 313-NoSQL Claroline课程资料 HBase安装 ... Java查询:Put,Scanner,Filter ... 23/09的放映 课程: 入门课程结束 TP的连续性 放映09/30 班级 课程 放大Neo4J Java API 服务器没用吗?

    Java学习路线图.pdf

    * 并发基础:了解 Java 中的并发编程,掌握 java.util.concurrent 包的使用。 阶段二:关系型数据库 * SQL 基础:了解关系型数据库的基础知识,掌握 SQL 语句的使用。 * 数据库管理系统:了解常用的数据库管理系统...

    TimestampsFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    Distributed-Systems-Bloom-Filters-Coded-Bloom-Filter-Counting-Bloom-Filter:在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom Filter计数。 这些用于Google Bigtable,Apache HBase,Apache Cassandra和PostgreSQL等系统中

    在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom Filter计数。 这些用于Google Bigtable,Apache HBase,Apache Cassandra和PostgreSQL等系统中。 Google Bigtable,Apache HBase,...

    Java及大数据学习路线.pdf

    SVN/IDEA开发⼯具 分布式版本管理⼯具Git与Github Mysql⾼级 Mycat实现MySQL的分布式、分库分表、读写分离 Nginx反向代理、负载均衡、动静分离 JVM内存模型、参数调优 JUC线程⾼级 分布式架构注册中⼼Zookeeper 虚拟...

    PageFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    2017最新大数据架构师精英课程

    本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...

    ColumnPrefixFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    ValueFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    FamilyFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    RowFilterWithRegex.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    RowFilterQuery.java

    ilter:所有的过滤器都在服务端生效,以保证被过滤掉的数据不会被传送到客户端 •过滤器是在HBase服务器端上执行判断操作 •过滤器可以应用到行键(RowFilter),列限定符...•FilterList可以组合使用多个Filter

    Hadoop实战中文版

    《Hadoop实战》作为云计算所青睐的分布式架构,Hadoop是一个用Java语言实现的软件框架,在由大量计算机组成的集群中运行海量数据的分布式计算,是谷歌实现云计算的重要基石。《Hadoop实战》分为3个部分,深入浅出地...

Global site tag (gtag.js) - Google Analytics