需求分析
HBase中,一般的查询都是通过rowkey过滤的,这样查询的速度才能够快。但是如果设计到一个表中的多个字段的组合查询还想速率不低效,仅仅只有一个rowkey就行不通了。这时就可以设计二级索引来解决这类的问题。
在源表中,把不是rowkey却要查询过滤的字段提出来,作为一张新表的rowkey,而把源表中的rowkey作为这张新表(称为索引表)中的列簇的列。
如下图要查询F:C1列中值为C11的中F:C2的值:
但是这里又出现了一个问题,如何方便的进行索引表与源表的同步。Phoenix可以解决同步和方便设计二级索引表的问题。
Phoenix可以看作SQL on HBase;它是构建在HBase之上的一个SQL中间层,实现SQL访问HBase表中的数据,实现HBase多表查询;不同于SQL on hive,它底层不会用mapreduce实现查询,而是直接使用HBase API实现。
安装部署Phoenix
- 官方已经编译好的Phoenix版本没有与hbase 0.98.6相对应的,所以我选择用Phoenix-4.2.4对应的hbase-0.98.4 进行重新编译。
- 下载Phoenix-4.2.2的源码包后,解压
- 修改pom.xml
<hbase.version>0.98.6-hadoop2</hbase.version>
<hadoop-two.version>2.5.0</hadoop-two.version>
-
用maven重新进行编译
- 安装
在重新编译完成后,在解压编译目录下,找到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/
- 关联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/
- 启动phoenix测试连接hbase即可成功