设为首页 加入收藏

TOP

Hbase Filter+Scan 查询效率优化
2018-12-22 13:49:14 】 浏览:53
Tags:Hbase Filter Scan 查询 效率 优化

Hbase Filter+Scan 查询效率问题

众所周知,Hbase利用filter过滤器查询时候会进行全表扫描,查询效率低下,如果没有二级索引,在项目中很多情况需要利用filter,下面针对这种情况尝试了几种优化的方案,仅供参考,欢迎交流。

根据业务要求,作者需要根据时间范围搜索所需要的数据,所以作者设计的rowKey是以时间戳为起始字符串的。

正确尝试:
1.scan 设置 开始行和结束行

            Scan scan = new Scan();
            scan.setStartRow("startRowKey".getBytes());
            scan.setStopRow("stopRowKey".getBytes());

结论:查询效率明显提升

2.查询的数量越小越好
总数据量越大,查询越耗时,所以为保证效率,开始行和结束行之间需要遍历的数据总量越少越好。

需要说明的是,在filter 中RowFilter设置开始行(前缀)和结束行(前缀)
并不能提升查询效率,因为还是全表扫描。

        FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL);
        //开头大于等于starTm的行
      
         Filter starTime = new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,
                   new BinaryPrefixComparator(DateUtil.formatDate(starTime, "yyyyMMddHHmmssSSS").getBytes()));
         filters.addFilter(starTime);
      

        //开头小于等于endTime的行
        
          Filter endTime = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
                    new BinaryPrefixComparator(DateUtil.formatDate(endTime, "yyyyMMddHHmmssSSS").getBytes()));
          filters.addFilter(endTime);
       

结论:利用san+filter方式查询hbase时,一定要设置starRow 和stopRow

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spark 读取Hbase表数据并实现类似.. 下一篇Spark 写入hbase 遇到的问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目