您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 1浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

phoenix到底是如何查询的

宝哥大数据 发布时间:2018-12-08 14:49:38 ,浏览量:1

一、Scan 原理

 scanAPI原理: 最常见的scan用法,见官方API文档。scan的原理之前在多篇文章中都有提及,为了表述方便,有必要在此简单概述一番。HBase中scan并不像大家想象的一样直接发送一个命令过去,服务器就将满足扫描条件的所有数据一次性返回给客户端。而实际上它的工作原理如下图所示: 在这里插入图片描述

1.1、源码系列
  • Scan 客户端
  • Scan 服务端
二、Filter

参考: 源码解析Filter的流程 Filter:运行在服务器端, RegionScannerImpl中的nextInternal(int limit)方法中进行调用

  private boolean nextInternal(int limit) throws IOException {
      while (true) {
        byte [] currentRow = peekRow();
        if (isStopRow(currentRow)) {
          if (filter != null && filter.hasFilterRow()) {
            filter.filterRow(results);
          }
          if (filter != null && filter.filterRow()) {
            results.clear();
          }
          return false;
        } else if (filterRowKey(currentRow)) {
          nextRow(currentRow); 
 }
三、协处理器

参考: https://www.cnblogs.com/liuwei6/p/6837674.html

加载问题 四、phoenix 原理

Phoenix通过以下方法来奉行把计算带到离数据近的地方的哲学:

  • 协处理器 在服务端执行操作来最小化服务端和客户端的数据传输

  • 定制的过滤器 为了删减数据使之尽可能地靠近源数据并最小化启动代价,Phoenix使用原生的HBase APIs而不是使用Map/Reduce框架

五、phoenix安装 5.1、配置 5.1.1、Phoenix 索引重建操作 5.1.2、Phoenix 索引生命周期 查询 1.1、对创建索引列查询
0: jdbc:phoenix:> select PK, "lat" from MP where "lat" =  28.28184750074689;
44 rows selected (0.219 seconds)
  • 查询计划, 可以看到 RANGE SCAN OVER IDX_MP_LAT [28.282], 的确是走索引 在这里插入图片描述
1.2、对未建索引列查询
0: jdbc:phoenix:> select PK, "lng" from MP where "lng" =  121.61598033795607;
63 rows selected (49.249 seconds)
  • 查询计划, 可以看到FULL SCAN OVER MP,是扫描全表 在这里插入图片描述
1.3、查询条件中包括rowkey, 查询更加高效

在这里插入图片描述

1.4、 通过 phoenix API 查询 1.4.1、创建索引
创建异步索引
create index IDX_MP_LAT on MP("b"."lat") ASYNC;

加载索引
hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table MP  --index-table IDX_MP_LAT --output-path /apps/hbase/data/data/default/IDX_MP_LAT

在这里插入图片描述

主键与字段配合 1.4.2、MP表没有创建索引, 根据主键,以及字段

在这里插入图片描述

phoenix 分页 5.2、问题 5.2.1、创建索引由于时间太长,客户端断开了链接怎么办?

一般情况下当前索引表的状态是building状态的(可以在sqlline中使用 !table命令查看),只有当索引表状态变为active才算真正完成了索引构建。此时有两种解决方法:第一、通过alter index命令rebuild索引。第二、删除building状态的索引表,配置更大的客户端超时时间,重新创建索引。

5.2.2、索引表一直处于building状态 5.2.3、向hbase表中插入数据, 但是 phoenix中对应的映射视图, 没有数据更新
  • 解决 删除视图,重建,就有了。
关注我的公众号【宝哥大数据】,更多干货

在这里插入图片描述

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.1227s