Hbase的SQL中间层——Phoenix
This commit is contained in:
parent
17b4a5c7ec
commit
bc58db63ac
@ -23,9 +23,9 @@
|
||||
|
||||
## 一、Phoenix简介
|
||||
|
||||
Phoenix是HBase的开源SQL层。使得您可以使用标准JDBC API而不是常规HBase客户端API来操作Hbases上的数据。
|
||||
`Phoenix`是HBase的开源SQL中间层,它允许你使用标准JDBC的方式来操作HBase上的数据。在`Phoenix`之前,如果你要访问HBase,只能调用它的Java API,但相比于使用一行SQL就能实现数据查询,HBase的API还是过于复杂。`Phoenix`的理念是`we put sql SQL back in NOSQL`,即你可以使用标准的SQL就能完成对HBase上数据的操作。同时这也意味着你可以通过集成`Spring Data JPA`或`Mybatis`等常用的持久层框架来操作HBase。
|
||||
|
||||
Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排并行执行以生成标准的JDBC结果集,同时Phoenix还拥有二级索引等Hbase不具备的特性,这使得Phoenix具有极好的性能表现。
|
||||
其次`Phoenix`的性能表现也非常优异,`Phoenix`查询引擎会将SQL查询转换为一个或多个HBase Scan,通过并行执行来生成标准的JDBC结果集。它通过直接使用HBase API以及协处理器和自定义过滤器,可以为小型数据查询提供毫秒级的性能,为千万行数据的查询提供秒级的性能。同时Phoenix还拥有二级索引等HBase不具备的特性,因为以上的优点,所以`Phoenix`成为了HBase最优秀的SQL中间层。
|
||||
|
||||
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/Phoenix-hadoop.png"/> </div>
|
||||
|
||||
@ -43,9 +43,7 @@ Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询
|
||||
|
||||
### 2.1 下载并解压
|
||||
|
||||
官方下载地址: http://phoenix.apache.org/download.html
|
||||
|
||||
官方针对Apache版本和CDH版本的HBase均提供了安装包,按需下载即可。这里我们下载的版本为`4.14.0-cdh5.14.2`
|
||||
官方针对Apache版本和CDH版本的HBase均提供了安装包,按需下载即可。官方下载地址: http://phoenix.apache.org/download.html
|
||||
|
||||
```shell
|
||||
# 下载
|
||||
@ -56,9 +54,9 @@ tar tar apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
|
||||
|
||||
### 2.2 拷贝Jar包
|
||||
|
||||
按照官方文档的说明,需要将phoenix server jar 添加到所有 Region Servers上 Hbase 安装目录的 lib目录下。
|
||||
按照官方文档的说明,需要将`phoenix server jar`添加到所有`Region Servers`的安装目录的`lib`目录下。
|
||||
|
||||
这里由于我搭建的是Hbase伪集群,所以只需要拷贝到当前机器的HBase的lib目录下。如果是真实集群,则使用scp命令分发到所有Region Servers机器上。
|
||||
这里由于我搭建的是HBase伪集群,所以只需要拷贝到当前机器的HBase的lib目录下。如果是真实集群,则使用scp命令分发到所有`Region Servers`机器上。
|
||||
|
||||
```shell
|
||||
cp /usr/app/apache-phoenix-4.14.0-cdh5.14.2-bin/phoenix-4.14.0-cdh5.14.2-server.jar /usr/app/hbase-1.2.0-cdh5.15.2/lib
|
||||
@ -75,10 +73,10 @@ start-hbase.sh
|
||||
|
||||
### 2.4 启动Phoenix
|
||||
|
||||
在Phoenix解压目录下的`bin`目录下执行如下命令,需要指定Zookeeper的地址:
|
||||
在Phoenix解压目录下的`bin`目录下执行如下命令,需要指定Zookeeper的地址:
|
||||
|
||||
+ 如果HBase采用Standalone模式或者伪集群模式搭建,则采用内置的 Zookeeper,默认端口为2181;
|
||||
+ 如果是HBase是集群模式并采用自己搭建的Zookeeper集群,则按照自己的实际情况指定端口
|
||||
+ 如果HBase采用Standalone模式或者伪集群模式搭建,则默认采用内置的 Zookeeper服务,端口为2181;
|
||||
+ 如果是HBase是集群模式并采用外置的Zookeeper集群,则按照自己的实际情况进行指定。
|
||||
|
||||
```shell
|
||||
# ./sqlline.py hadoop001:2181
|
||||
@ -106,7 +104,7 @@ CREATE TABLE IF NOT EXISTS us_population (
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/Phoenix-create-table.png"/> </div>
|
||||
|
||||
新建的表会按照特定的规则转换为Hbase上的表,关于表的信息,可以通过Hbase Web UI 进行查看:
|
||||
新建的表会按照特定的规则转换为HBase上的表,关于表的信息,可以通过Hbase Web UI 进行查看:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-web-ui-phoenix.png"/> </div>
|
||||
|
||||
@ -167,29 +165,27 @@ ORDER BY sum(population) DESC;
|
||||
|
||||
### 3.7 扩展
|
||||
|
||||
从上面的简单操作中我们可以看出,Phoenix 查询语句与我们正常使用的SQL是基本相同的,关于Phoenix 支持的语句、数据类型、函数、序列(和Oracle中序列类似)因为涵盖内容很广,可以参考其官方文档,官方上有详尽的配图说明的:
|
||||
从上面的操作中可以看出,Phoenix支持大多数标准的SQL语法。关于Phoenix支持的语句、数据类型、函数、序列等详细信息,因为涉及内容很多,可以参考其官方文档,官方文档上有详细的说明:
|
||||
|
||||
+ 语法(Grammar):https://phoenix.apache.org/language/index.html
|
||||
+ **语法(Grammar)** :https://phoenix.apache.org/language/index.html
|
||||
|
||||
+ 函数(Functions):http://phoenix.apache.org/language/functions.html
|
||||
+ **函数(Functions)** :http://phoenix.apache.org/language/functions.html
|
||||
|
||||
+ 数据类型(Datatypes):http://phoenix.apache.org/language/datatypes.html
|
||||
+ **数据类型(Datatypes)** :http://phoenix.apache.org/language/datatypes.html
|
||||
|
||||
+ 序列(Sequences):http://phoenix.apache.org/sequences.html
|
||||
+ **序列(Sequences)** :http://phoenix.apache.org/sequences.html
|
||||
|
||||
+ 联结查询(Joins):http://phoenix.apache.org/joins.html
|
||||
+ **联结查询(Joins)** :http://phoenix.apache.org/joins.html
|
||||
|
||||
|
||||
|
||||
## 四、Phoenix Java API
|
||||
|
||||
因为Phoenix遵循JDBC规范,并提供了对应的数据库驱动PhoenixDriver,这使采用Java对其进行操作的时候,就如同对其他关系型数据库(例如 MySQL)操作一样。
|
||||
|
||||
因为在实际的开发中我们通常都是采用第三方框架,比如mybatis,Hibernate,Spring Data 等,很少使用原生Java API操作关系型数据库,所以这里只给出一个简单的查询作为示例,并在下一篇文章中给出Spring boot + mybatis + Phoenix 的整合用例。
|
||||
因为Phoenix遵循JDBC规范,并提供了对应的数据库驱动`PhoenixDriver`,这使采用Java对其进行操作的时候,就如同对其他关系型数据库一样,下面给出基本的操作实例。
|
||||
|
||||
### 4.1 引入Phoenix core JAR包
|
||||
|
||||
如果是maven项目,直接在maven中央仓库找到对应的版本,导入依赖即可
|
||||
如果是maven项目,直接在maven中央仓库找到对应的版本,导入依赖即可:
|
||||
|
||||
```xml
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core -->
|
||||
@ -200,7 +196,7 @@ ORDER BY sum(population) DESC;
|
||||
</dependency>
|
||||
```
|
||||
|
||||
如果是普通项目,则可以从Phoenix 解压目录下找到对应的JAR包,然后手动引入
|
||||
如果是普通项目,则可以从Phoenix解压目录下找到对应的JAR包,然后手动引入:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/phoenix-core-jar.png"/> </div>
|
||||
|
||||
@ -247,6 +243,8 @@ public class PhoenixJavaApi {
|
||||
|
||||
|
||||
|
||||
实际的开发中我们通常都是采用第三方框架来操作数据库,如`mybatis`,`Hibernate`,`Spring Data`等。关于Phoenix与这些框架的整合步骤参见下一篇文章:[Spring/Spring Boot + Mybatis + Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spring+Mybtais+Phoenix整合.md)
|
||||
|
||||
# 参考资料
|
||||
|
||||
1. http://phoenix.apache.org/
|
||||
|
Loading…
x
Reference in New Issue
Block a user