使用Phoenix连接HBase-0.96.0

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的地址;输入后如下:
使用Phoenix连接HBase-0.96.0_第1张图片

然后就可以执行sql语句了。对应的sql语句详见:http://forcedotcom.github.io/phoenix/

转载请注明出处:http://blog.csdn.net/iAm333

你可能感兴趣的:(使用Phoenix连接HBase-0.96.0)