使用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的地址;输入后如下:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值