Hadoop 带偏移量的Hbase扫描

Hadoop 带偏移量的Hbase扫描,hadoop,hive,hbase,Hadoop,Hive,Hbase,是否有一种方法可以扫描HBase表,例如获取前100个 结果,然后再拿下100等等。。。就像在SQL中一样 有限制和补偿吗? 我的行键是uuid您可以通过多种方式执行。最简单的是页面过滤器。下面是第150页的代码示例 private static final byte[] POSTFIX = new byte[] { 0x00 }; Filter filter = new PageFilter(15); int totalRows = 0; byte[] lastRow = null; whi

是否有一种方法可以扫描HBase表,例如获取前100个 结果,然后再拿下100等等。。。就像在SQL中一样 有限制和补偿吗?
我的行键是uuid

您可以通过多种方式执行。最简单的是页面过滤器。下面是第150页的代码示例

private static final byte[] POSTFIX = new byte[] { 0x00 }; Filter filter = new PageFilter(15); int totalRows = 0; byte[] lastRow = null; while (true) { Scan scan = new Scan(); scan.setFilter(filter); if (lastRow != null) { byte[] startRow = Bytes.add(lastRow, POSTFIX); System.out.println("start row: " + Bytes.toStringBinary(startRow)); scan.setStartRow(startRow); }
 ResultScanner scanner = table.getScanner(scan); int localRows = 0; 
 Result result; 
 while ((result = scanner.next()) != null) { System.out.println(localRows++ + ": " + result); totalRows++;
 lastRow = result.getRow(); }
 scanner.close();
 if (localRows == 0) break; } 
System.out.println("total rows: " + totalRows); 私有静态最终字节[]后缀=新字节[]{0x00}; 过滤器过滤器=新页面过滤器(15); int totalRows=0;字节[]lastRow=null; while(true){ 扫描=新扫描(); scan.setFilter(filter); if(lastRow!=null){ byte[]startRow=Bytes.add(最后一行,后缀); System.out.println(“起始行:“+Bytes.toStringBinary(startRow)); 扫描设置开始行(开始行); }
 ResultScanner scanner=table.getScanner(扫描); int localRows=0; 
 结果; 
 while((result=scanner.next())!=null){ System.out.println(localRows+++“:“+结果); totalRows++;
 lastRow=result.getRow(); }
 scanner.close();
 如果(localRows==0)中断; } 
System.out.println(“总行数:“+totalRows”);
或者,您可以为想要的限制设置扫描捕获,然后将开始行更改为上一次扫描的最后一行+1

我在hbase权威版中看到了它。它有一个很大的头顶。我不确定这里有多大的头顶。这与使用缓存进行扫描相同。找到起始行(简单),开始阅读,直到达到极限。唯一的小问题在最终指南中提到“筛选器在不同的区域服务器上并行运行,无法跨这些边界保留或传递其当前状态。因此,在结束扫描之前,每个筛选器需要扫描至少多达pageCount行。这意味着PageFilter的效率有点低,因为向客户端报告的行数比需要的多。“嗨,Arun,有没有办法让用户选择第I个页面?通过您的方法,我可以允许用户迭代整个结果集,即1”页面“一次,但我不能让用户选择任何他想要访问的给定页码。我更喜欢
do{}while(localRows!=0)
,而不是
while(true){break}
。否则,太棒了。谢谢,这是一个很好的解决方案,但是开销很大