HBase-15-Phoenix

◆构建在ApacheHBase之上的一个SQL中间层

可以在ApacheHBase上执行SQL查询,性能强劲

较完善的查询支持,支持二级索引,查询效率较高

·简介:·优势:
Put the SQL backin NoSQL,程序员熟知SQL语句

◆具有完整ACID事务功能的标准SQL和IDBCAPI的强大功能

◆完全可以和其他Hadoop产品例如SparkHivePig、Flume以及
MapReduce集成

图中展示了,通过phoenix和hive对基于HDFS和HBase的数据记性查询的时候,随着数据量的增长,查询时间的变化曲线

 

  • phoenix的性能是如何提高的?

通过HBase协处理器,在服务端进行操作,从而最大限度的减少客
户端和服务器的数据传输
通过定制的过滤器对数据进行处理

◆使用本地的HBaseApi而不是通过MapReduce框架,这样能最大限
度的降低启动成本

  • Phoenix特性

    • 多租户

    • 二级索引

    • 用户定义函数(分临时函数和永久函数)

    • 行时间戳列

    • 分页查询

    • 视图

Phoenix安装

下载对应版本的安装包

配置与现有HBase集群集成

重新启动HBase环境,并测试环境是否可以正常使用

1:tar zxf apache-phoenix-4.13.1-HBase-1.2-bin.tar.gz

2:cd apache-phoenix-4.13.1-HBase-1.2-bin

    cp phoenix-core-4.13.1-HBase-1.2.jar ../hbase-1.2.4/lib/

    cp phoenix-4.13.1-HBase-1.2-server.jar ../hbase-1.2.4/lib/

3:cd bin

    ./sqlline.py

[root@test bin]# ./sqlline.py
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:localhost:2181:/hbase none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:localhost:2181:/hbase
21/05/11 21:38:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 4.13)
Driver: PhoenixEmbeddedDriver (version 4.13)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
92/92 (100%) Done
Done
sqlline version 1.2.0
0: jdbc:phoenix:localhost:2181:/hbase> help
  • 通过shell操作phoenix

  • 通过java jdbc操作phoenix

<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>4.13.1-hbase-1.2</version>
</dependency>
public static void main(String[] args) throws Exception{
    Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
    Connection connection = DriverManager.getConnection("jdbc:phoenix:10.0.0.174:2181");
    PreparedStatement preparedStatement = connection.prepareStatement("select * from person");
    ResultSet resultSet = preparedStatement.executeQuery();
    while (resultSet.next()){
        System.out.println(resultSet.getString("NAME"));
    }
    preparedStatement.close();
    connection.close();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值