085 HBase的二级索引,以及phoenix的安装(需再做一次)

时间:2022-08-25 16:12:45

一:问题由来

1.举例

  有A列与B列,分别是年龄与姓名。

  如果想通过年龄查询姓名。

  正常的检索是通过rowkey进行检索。

    根据年龄查询rowkey,然后根据rowkey进行查找姓名。

    这样的效率不高,因为要两次scan。

2.建议有一张索引表。

二:HBase的二级索引

1.讲解

  rowkey是uid+ts
    11111_20161126111111:

    这个rowkey方便查询某一uid的某一个时间段内的数据

  问题:
    查询某一时间段内所有用户的数据:按照时间

  索引表

   rowkey:ts+uid 20161126111111—111111

   其他列:info:uid

   值是uid+ts,因为这个是原表的rowkey。

  检索流程:

    从索引表中根据时间段来查询源表rowkey
    根据rowkey来查询源表

2.还有的问题

  如何保持索引表与原表的同步问题。

  好的方式是:编写协处理器,将客户端实现的逻辑代码放到服务端。

  同时,可以使用其他的框架,主要有solr,phoenix。elassearch。

3.协处理器

  observer处理器:观察者,类似于触发器

  endpoint类:终端类,类似于储存过程。

4.hbase自带的协处理器

  这个在hbase:meta中

  可以通过desc 'hbase:meta'进行查看

  是coprocessor$1。

三:phoenix的安装

1.上传源码包

  因为对应的hbase0.98.6没有对应的phoenix,所以需要自己进行编译。

  085 HBase的二级索引,以及phoenix的安装(需再做一次)

2.解压到modules文件夹下

  tar -zxvf phoenix-4.2.2-src.tar.gz -C /etc/opt/modules/

3.修改pom.xml文件

  有一个问题,将所有的hadoop-two.version 变量都换成2.5.0

  <hbase.version>0.98.6-hadoop2</hbase.version>
  <hadoop-two.version>2.5.0</hadoop-two.version>

  085 HBase的二级索引,以及phoenix的安装(需再做一次)

4.进入主目录

5.编译

  mvn clean package -DskipTests

  ----------------------------------------------------(以下需要重新编译,重新做)------------------------------------------------------------

6.查找编译好的包

  Phoenix_home/Phoenix-assembly/target/phoenix-4.2.2.tar.gz

7.安装phoenix

  启动的时候,后面跟的是zookeeper地址。

085 HBase的二级索引,以及phoenix的安装(需再做一次)

8.phoenix映射原有的表

  执行的语句,在phoenix中。

  hbase对于大小写敏感,然后需要将phoenix中的语句进行双引号引起来。

  085 HBase的二级索引,以及phoenix的安装(需再做一次)

9.看效果

  可以在phoenix中查询映射的表。

  select * from "s1";

  将会发现,这里的数据与hbase中的数据相同。