在HBase中扫描和过滤

时间:2013-09-09 07:13:23

标签: hadoop mapreduce cloud hbase distributed-computing

我是HBase的新手。请告诉我如何使用扫描和过滤器查询HBase中的数据(一段示例代码)。搜索了很多。但感到困惑。请帮忙。感谢。

2 个答案:

答案 0 :(得分:0)

找到帮助并不困难。谷歌搜索如何使用hbase过滤器肯定会给你很多很好的链接。例如,请参阅 this this

使用过滤器的AFA,首先需要创建扫描对象,然后创建过滤器实例,将过滤器添加到此扫描对象并使用 HTable 实例调用 getScanner(),并将扫描对象作为参数传递给它。 例如,我有一个表格,其中包含一些与我的用户相关的数据,而rowkey是userID。现在,我想获取有关userID以 abc 开头的所有用户的所有信息。在这种情况下,我可以通过传递 abc 作为参数来使用 PrefixFilter 。这将返回rowkey以 abc 开头的所有行。像这样:

public static void main(String[] args) throws IOException {

    Configuration conf = HBaseConfiguration.create();
    HTable table = new HTable(conf, TABLE_NAME);
    String userID = "abc";

    //Get the data
    Scan s = new Scan();
    Filter filter = new PrefixFilter(Bytes.toBytes("abc"));
    s.setFilter(filter);
    ResultScanner rs = table.getScanner(s);
    for(Result r : rs){
        System.out.println("VALUE : " + Bytes.toString(r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("c1"))));
    }
    rs.close();
    table.close();
}

结果 API提供了许多可以根据需要使用的方法,例如 getRow(),getColumn()等。您可以查看 API 了解更多信息。我还建议您通过 Lars George 获取 HBase The Definitive Guide 的副本。这是一本很棒的书,里面有你需要的一切,以便了解HBase。对于过滤器,请参阅第4章

HTH

答案 1 :(得分:0)

以下是扫描和过滤器的示例代码:

    Configuration conf = HBaseConfiguration.create();
    HTable table = new HTable(conf, "emp");
    List<Filter> filters = new ArrayList<Filter>();
    Filter famFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL,
    new BinaryComparator(Bytes.toBytes("salary")));
    filters.add(famFilter);
    Filter colFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL,
    new BinaryComparator(Bytes.toBytes("gross")));
    filters.add(colFilter);
    Filter valFilter = new      
    ValueFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,
    new BinaryComparator(Bytes.toBytes("1500")));
    filters.add(valFilter);
    FilterList fl = new FilterList( FilterList.Operator.MUST_PASS_ALL,filters);
    Scan scan = new Scan();
    scan.setFilter(fl);
    ResultScanner scanner = table.getScanner(scan);
    for (Result result : scanner) {
         for (KeyValue kv : result.raw()) {
        System.out.println("kv:"+kv +", Key: " + Bytes.toString(kv.getRow())          +",Value: " +Bytes.toString(kv.getValue()));
          }
    }
    scanner.close();