使用 Java 在 Hbase 中使用过滤器获取固定行
Posted
技术标签:
【中文标题】使用 Java 在 Hbase 中使用过滤器获取固定行【英文标题】:Fetch fixed rows with filters in Hbase using Java 【发布时间】:2018-03-19 10:35:51 【问题描述】:在我的应用程序中,我需要从 Hbase 获取数据,我需要对这些数据应用过滤器,并且我需要限制要获取的记录数。下面是我写的代码:
ResultScanner scanner = null;
HTable table = null;
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", hbaseServer);
config.set("hbase.zookeeper.property.clientPort", hbasePort);
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);
table = new HTable(config, "TableName");
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("ColumnName"),
Bytes.toBytes("ColumnName"), CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(String.valueOf("FilterValue"))));
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("ColumnName2"),
Bytes.toBytes("ColumnName2"), CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(String.valueOf("FilterValue2"))));
list.addFilter(filter);
list.addFilter(filter1);
Scan scan = new Scan();
scan.setFilter(list);
scan.setFilter(new PageFilter(10));
scanner = table.getScanner(scan);
过滤器工作得很好,但我得到了完整的数据集。 scan.setFilter(new PageFilter(10)) 不起作用。我只需要提取与提供的过滤器匹配的前 10 条记录。我也试过:
scan.setMaxResultSize(10);
scan.setMaxResultsPerColumnFamily(10);
但这些都不起作用。上面的代码可能有什么问题?
【问题讨论】:
setMaxResultSize
并没有按照您的想法进行 - 它设置了最大结果大小(以字节为单位)。 hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/…
【参考方案1】:
如果你正确地复制了代码,你就重写了你的第一个过滤器:
Scan scan = new Scan();
scan.setFilter(list);
scan.setFilter(new PageFilter(10)); <-- changes FilterList to PageFilter
看来你想做
list.addFilter(new PageFilter(10));
【讨论】:
以上是关于使用 Java 在 Hbase 中使用过滤器获取固定行的主要内容,如果未能解决你的问题,请参考以下文章
HBase Filter 过滤器之QualifierFilter详解