Phoenix是一个中间件,使用它可以让你在hbase这种nosql数据库上使用sql语句进行数据库操作。它使用java编写,提供了一个客户端可嵌入的JDBC驱动。Phoenix 查询引擎会将 SQL 查询转换为一个或多个 HBase scan,并编排执行以生成标准的 JDBC 结果集。直接使用 HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。
本文主要介绍如何配置Phoenix使得它能连接HBase-0.96.0。现在Phoenix已经有了2.x、3.x和4.x版本,但是这三者都不支持HBase-0.96.0,不过好在Phoenix在Github上提供了一个支持HBase-0.96的分支。地址为:https://github.com/forcedotcom/phoenix/tree/port-0.96。
不过,虽然如此,但该版本默认支持的是0.96.1版本,而不是0.96.0。因此,我们需要对它做一些修改才能让其支持0.96.0。首先,需要将pom.xml文件中的
<hbase-hadoop1.version>0.96.1-hadoop1</hbase-hadoop1.version>
<hbase-hadoop2.version>0.96.1-hadoop2</hbase-hadoop2.version>
修改为:
<hbase-hadoop1.version>0.96.0-hadoop1</hbase-hadoop1.version>
<hbase-hadoop2.version>0.96.0-hadoop2</hbase-hadoop2.version>
其次,需要将com.salesforce.phoenix.query包里的ConnectionlessQueryServicesImpl类的getAllTableRegions方法做如下修改:
public List<HRegionLocation> getAllTableRegions(byte[] tableName) throws SQLException {
return Collections.singletonList(new HRegionLocation(
new HRegionInfo(TableName.valueOf(tableName), HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW),
new ServerName("localhost", HConstants.DEFAULT_REGIONSERVER_PORT,0), -1));
}
修改好保存之后,进入下载的Phoenix主目录,执行如下命令(需要先安装好maven):
mvn -Dmaven.test.skip.exec=true -Dhadoop.profile=2 package
编译打包好之后,将target目录下的phoenix-2.2.0-SNAPSHOT.jar文件拷贝到hbase集群中的所有regionserver下的lib目录中,例如,我的目录为:/hbase/hbase-0.96.0-hadoop2/lib。然后重启所有的regionserver和master。
进入$PHOENIX_HOME/bin 输入:./sqlline.sh l-datalog1.data.cn1:2181 ,l-datalog.data.cn1:2181是zookeeper的地址;输入后如下:
然后就可以执行sql语句了。对应的sql语句详见:http://forcedotcom.github.io/phoenix/
转载请注明出处:http://blog.csdn.net/iAm333