zoukankan      html  css  js  c++  java
  • HBase中我认为比较常用的两个类:Scan和Filter

    学习HBase一段时间后,我认为HBase中比较常用,同时也是必须掌握的两个API是Scan和Filter。如下是我的理解:

    1.Scan  ---- 扫描类

       作用:用来对一个指定Table进行按行扫描,从而得到属于[起始行健,终止行健)的扫描结果

       使用场合:单纯的扫描用途;用于MapReduce计算的输入

    2.Filter --- 过滤类

       作用:用来提前在Server端,对要返回的数据,按照定义好的要求进行过滤;从而降低从Server到Client的数据量,进而降低对网络IO的影响

       使用场合:与Scan配合使用

       种类:有HBase定义好的几种Filter,也有提供基于FilterBase进行自定义过滤器的方法。特别要注意的是:Filter的作用是过滤掉东西,而不是保留东西。因此其返回true,则意味着成功过滤掉了;返回false,表示没有被过滤掉。

    3.举例:

            HTable t = new HTable(conf, "twits");
            Scan s = new Scan(startRowkey, endRowkey);  //构造Scan对象,此对象会返回[startRowkey,endRowkey)范围的记录。特别的,HBase里面的行健是按照字典顺序排列的(可以和lucene里面的索引的顺序进行类比吧?);而且startRowkey和endRowkey也无须真实存在,HBase会自动找到最靠近其的实际rowkey作为边界
            //当然,这里还可以加入过滤器,比如:s.setFilter(具体的Filter对象实例);

            ResultScanner rs = t.getScanner(s); //获得扫描后的结果集
            for(Result r:rs) { //每一行的扫描结果,记录在Result中;
                for(KeyValue kv:r.raw()) {//这里就体现了HBase中的存储实际上是 嵌套的MAP 的含义了。
                    System.out.println("Rowkey is " + Bytes.toString(kv.getRow()));
                    System.out.println("family is " + Bytes.toString(kv.getFamily()));
                    System.out.println("qualify is " + Bytes.toString(kv.getQualifier()));
                    System.out.println("timestamp is " + kv.getTimestamp());    
                    System.out.println("value is " + Bytes.toString(kv.getValue()));
                }
            }

  • 相关阅读:
    hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound
    css-画三角箭头
    tomcat提示警告: An attempt was made to authenticate the locked user"tomcat"
    liunx下tomcat启动 Cannot find ./catalina.sh
    java:提示Could not initialize class sun.awt.X11GraphicsEnvironment
    MySQL定时器开启、调用实现代码
    mysql-存储过程案例-存储过程中创建表和修改表数据
    PowerDesigner导出SQL时自动生成注释
    mysql-利润set变量模拟分组查询每组中的第N条数据
    HTTP 405 错误 – 方法不被允许 (Method not allowed)
  • 原文地址:https://www.cnblogs.com/lagujw/p/3639233.html
Copyright © 2011-2022 走看看