分享

Phoenix——向HBase发送标准SQL成为现实

问题导读
1、什么是Phoenix呢?
2、Phoenix哪些需要重点学习?
3、如何使用 Phoenix与SQL结合?




写在前面一:
本文总结基于HBase的SQL查询系统——Salesforce phoenix
1.jpg


写在前面二:
环境说明:
2.jpg


一、什么是Phoenix
摘自官网:
3.jpg


Phoenix是一个提供hbase的sql操作的框架,Phoenix是构建在HBase之上的一个SQL中间层。Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。对于简单的低延迟查询,其性能量级为毫秒;对于百万级别的行数来说,其性能量级为秒。Phoenix并不是像HBase那样
用于map-reduce job的,而是通过标准化的语言来访问HBase数据的。

Phoenix最值得关注的特性:
1、嵌入式的JDBC驱动,实现了大部分的java.sql接口,包括元数据API
2、可以通过多部行键或是键/值单元对列进行建模
3、完善的查询支持,可以使用多个谓词以及优化的扫描键
4、DDL支持:通过CREATE TABLE、DROP TABLE及ALTER TABLE来添加/删除列
5、版本化的模式仓库:当写入数据时,快照查询会使用恰当的模式
6、DML支持:用于逐行插入的UPSERT VALUES、用于相同或不同表之间大量数据传输的UPSERT SELECT、用于删除行的DELETE
7、通过客户端的批处理实现的有限的事务支持
8、单表——还没有连接,同时二级索引也在开发当中
9、紧跟ANSI SQL标准


二、 Phoenix原理
Phoenix基本原理是将一个对于HBase client来说比较复杂的查询转换成一系列Region Scan,结合coprocessor和custom  filter在多台Region Server上进行并行查询,汇总各个Scan结果。种种迹象表明,Phoenix应该不是个优化的OLAP系统,更像是一个用于简单单表查询,过滤,排序,检索的OLTP系统。 Phoenix 可以为我们目前大数据平台提供比较便捷的数据操作能力(直接用jdbc方式),性能比较不错,注意不要使用多表查询即可 。


三、 Phoenix安装配置
1、下载
phoenix-3.0.0-incubating.tar.gz
下载地址
2、拷贝phoenix-3.0.0-incubating/common/phoenix-core-3.0.0-incubating.jar至$HBASE_HOME/lib/下
3、重启HBase集群
若通过客户端访问phoenix,需进行以下操作:
把phoenix-3.0.0-incubating/hadoop-1/phoenix-3.0.0-incubating-client.jar添加到Phoenix客户端的类路劲下

四、访问 Phoenix
3.1、通过命令行
进入phoenix
  1. cd /home/yujianxin/hbase/phoenix/phoenix-3.0.0-incubating/bin
  2. ./sqlline.py slave3:2181
复制代码

出现以下响应,说明安装成功
4.jpg


3.2、通过Java
  1. Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
  2. // connection string: jdbc:phoenix [ :<zookeeper quorum> [ :<port number> ] [ :<root node> ] ]
  3. Connection connection = DriverManager.getConnection("jdbc:phoenix:slave3:2181");
复制代码
5.jpg



五、使用 Phoenix
使用phoenix-3.0.0-incubating.tar.gz自带的数据进行测试
6.jpg


执行以上命令后,查看phoenix中的表:
7.jpg


查看HBase中的表,如下:
8.jpg


即可向HBase发送标准sql语句,通过Phoenix这个构建在HBase之上的SQL中间层对HBase进行操作。

已有(2)人评论

跳转到指定楼层
yxw839841231 发表于 2014-12-12 11:12:37
因为不能发帖,所以只好来回复问点问题,还希望知道的能帮忙解答,也求扩散。
最近公司因为业务需求,需要用到大数据框架,目前已经配置好了hadoop+hbase的集群。刚好看到phoenix这个执行标准SQL的插件,所以也用上了。那么问题来了:
以前我们用mysql或者Oracle,可以用mybatis或者hibernate这样的持久层框架,那么phoenix可以用么?phoenix也有自己的驱动,main方法测试也可以连接上,但是如果用以前Spring+mybatis的方式来管理的,死活是连不上的,不知道有没有人尝试过?或者有相关经历的?
回复

使用道具 举报

EASONLIU 发表于 2014-12-17 10:13:48
路过,学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条