大数据

Phonix的搭建

需求分析

HBase中,一般的查询都是通过rowkey过滤的,这样查询的速度才能够快。但是如果设计到一个表中的多个字段的组合查询还想速率不低效,仅仅只有一个rowkey就行不通了。这时就可以设计二级索引来解决这类的问题。
在源表中,把不是rowkey却要查询过滤的字段提出来,作为一张新表的rowkey,而把源表中的rowkey作为这张新表(称为索引表)中的列簇的列。
如下图要查询F:C1列中值为C11的中F:C2的值:

Paste_Image.png

但是这里又出现了一个问题,如何方便的进行索引表与源表的同步。Phoenix可以解决同步和方便设计二级索引表的问题。
Phoenix可以看作SQL on HBase;它是构建在HBase之上的一个SQL中间层,实现SQL访问HBase表中的数据,实现HBase多表查询;不同于SQL on hive,它底层不会用mapreduce实现查询,而是直接使用HBase API实现。

安装部署Phoenix

  1. 官方已经编译好的Phoenix版本没有与hbase 0.98.6相对应的,所以我选择用Phoenix-4.2.4对应的hbase-0.98.4 进行重新编译。
    • 下载Phoenix-4.2.2的源码包后,解压
    • 修改pom.xml
      0.98.6-hadoop2
      2.5.0
    • 用maven重新进行编译

      1.png

      2.png
  2. 安装
    在重新编译完成后,在解压编译目录下,找到Phoenix-assembly/target/phoenix-4.2.2.tar.gz后并对其解压。
    $ tar zxvf phoenix-4.2.2-src/phoenix-assembly/target/phoenix-4.2.2.tar.gz -C /opt/modules/
  3. 关联HBase
    在安装目录下找到对应的jar包,拷贝到hbase的lib目录下后,重启hbase。
    $ cp phoenix-4.2.2-client.jar lib/phoenix-core-4.2.2.jar /opt/modules/hbase-0.98.6-hadoop2/lib/

    替换Phoenix自带的hbase-site.xml

    $ cp /opt/modules/hbase-0.98.6-hadoop2/conf/hbase-site.xml bin/
  4. 启动phoenix测试连接hbase即可成功