开发者社区 > 云原生 > Serverless > 正文

hbase serverless 查询报错: Unsupport PageFilter

相同代码, 使用 hbase-client 连接自建hbase正常, 使用 alihbase-client 2.0.8 连接 hbase serverless 查询报错.

Caused by: java.io.IOException: TIOError(message:Unsupport filter org.apache.hadoop.hbase.filter.PageFilter)
	at com.alibaba.hbase.client.AliHBaseAPIProxyThriftImpl$Scanner.next(AliHBaseAPIProxyThriftImpl.java:637)
	at org.apache.hadoop.hbase.client.ResultScanner$1.hasNext(ResultScanner.java:53)
	... 25 more
Caused by: TIOError(message:Unsupport filter org.apache.hadoop.hbase.filter.PageFilter)
	at com.alibaba.hbase.thrift2.generated.THBaseService$getScannerResults_result$getScannerResults_resultStandardScheme.read(THBaseService.java:25413)
	at com.alibaba.hbase.thrift2.generated.THBaseService$getScannerResults_result$getScannerResults_resultStandardScheme.read(THBaseService.java:25380)
	at com.alibaba.hbase.thrift2.generated.THBaseService$getScannerResults_result.read(THBaseService.java:25322)
	at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:88)
	at com.alibaba.hbase.thrift2.generated.THBaseService$Client.recv_getScannerResults(THBaseService.java:1057)
	at com.alibaba.hbase.thrift2.generated.THBaseService$Client.getScannerResults(THBaseService.java:1042)
	at com.alibaba.hbase.client.AliHBaseAPIProxyThriftImpl$Scanner.next(AliHBaseAPIProxyThriftImpl.java:617)
	... 26 more

展开
收起
sybn 2020-04-09 14:05:14 1237 0
2 条回答
写回答
取消 提交回答
  • PageFilter的实现逻辑。

    public class PageFilter extends FilterBase {
      private long pageSize = Long.MAX_VALUE;
      private int rowsAccepted = 0;
     
      /**
       * Constructor that takes a maximum page size.
       *
       * @param pageSize Maximum result size.
       */
      public PageFilter(final long pageSize) {
        Preconditions.checkArgument(pageSize >= 0, "must be positive %s", pageSize);
        this.pageSize = pageSize;
      }
     
      public long getPageSize() {
        return pageSize;
      }
     
      @Override
      public ReturnCode filterKeyValue(Cell ignored) throws IOException {
        return ReturnCode.INCLUDE;
      }
     
      public boolean filterAllRemaining() {
        return this.rowsAccepted >= this.pageSize;
      }
     
      public boolean filterRow() {
        this.rowsAccepted++;
        return this.rowsAccepted > this.pageSize;
      }
      
    }
    

    其实很简单,内部有一个计数器,每次调用filterRow的时候,计数器都会+1,如果计数器值大于pageSize,filterrow就会返回true,那之后的行就会被过滤掉。

    2020-04-15 22:54:42
    赞同 展开评论 打赏
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    版本问题了、。

    2020-04-15 22:49:07
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载