优化阅读格式

This commit is contained in:
heibaiying
2019-07-31 17:18:07 +08:00
parent ceb868fe13
commit ca7c99802b
91 changed files with 4059 additions and 4058 deletions

View File

@ -23,9 +23,9 @@
## 一、Phoenix简介
`Phoenix`HBase的开源SQL中间层它允许你使用标准JDBC的方式来操作HBase上的数据。在`Phoenix`之前如果你要访问HBase只能调用它的Java API但相比于使用一行SQL就能实现数据查询HBaseAPI还是过于复杂。`Phoenix`的理念是`we put sql SQL back in NOSQL`即你可以使用标准的SQL就能完成对HBase上数据的操作。同时这也意味着你可以通过集成`Spring Data JPA``Mybatis`等常用的持久层框架来操作HBase。
`Phoenix`HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据。在 `Phoenix` 之前,如果你要访问 HBase只能调用它的 Java API但相比于使用一行 SQL 就能实现数据查询HBaseAPI 还是过于复杂。`Phoenix` 的理念是 `we put sql SQL back in NOSQL`,即你可以使用标准的 SQL 就能完成对 HBase 上数据的操作。同时这也意味着你可以通过集成 `Spring Data JPA``Mybatis` 等常用的持久层框架来操作 HBase。
其次`Phoenix`的性能表现也非常优异,`Phoenix`查询引擎会将SQL查询转换为一个或多个HBase Scan通过并行执行来生成标准的JDBC结果集。它通过直接使用HBase API以及协处理器和自定义过滤器可以为小型数据查询提供毫秒级的性能为千万行数据的查询提供秒级的性能。同时Phoenix还拥有二级索引等HBase不具备的特性因为以上的优点所以`Phoenix`成为了HBase最优秀的SQL中间层。
其次 `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,7 +43,7 @@
### 2.1 下载并解压
官方针对Apache版本和CDH版本的HBase均提供了安装包按需下载即可。官方下载地址: http://phoenix.apache.org/download.html
官方针对 Apache 版本和 CDH 版本的 HBase 均提供了安装包,按需下载即可。官方下载地址: http://phoenix.apache.org/download.html
```shell
# 下载
@ -54,9 +54,9 @@ tar tar apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
### 2.2 拷贝Jar包
按照官方文档的说明,需要将`phoenix server jar`添加到所有`Region Servers`的安装目录的`lib`目录下。
按照官方文档的说明,需要将 `phoenix server jar` 添加到所有 `Region Servers` 的安装目录的 `lib` 目录下。
这里由于我搭建的是HBase伪集群所以只需要拷贝到当前机器的HBaselib目录下。如果是真实集群则使用scp命令分发到所有`Region Servers`机器上。
这里由于我搭建的是 HBase 伪集群,所以只需要拷贝到当前机器的 HBaselib 目录下。如果是真实集群,则使用 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
@ -73,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
@ -84,7 +84,7 @@ start-hbase.sh
### 2.5 启动结果
启动后则进入了Phoenix交互式SQL命令行可以使用`!table``!tables`查看当前所有表的信息
启动后则进入了 Phoenix 交互式 SQL 命令行,可以使用 `!table``!tables` 查看当前所有表的信息
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/phoenix-shell.png"/> </div>
@ -104,13 +104,13 @@ 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>
### 3.2 插入数据
Phoenix 中插入数据采用的是`UPSERT`而不是`INSERT`,因为Phoenix并没有更新操作插入相同主键的数据就视为更新所以`UPSERT`就相当于`UPDATE`+`INSERT`
Phoenix 中插入数据采用的是 `UPSERT` 而不是 `INSERT`,因为 Phoenix 并没有更新操作,插入相同主键的数据就视为更新,所以 `UPSERT` 就相当于 `UPDATE`+`INSERT`
```shell
UPSERT INTO us_population VALUES('NY','New York',8143197);
@ -165,27 +165,27 @@ ORDER BY sum(population) DESC;
### 3.7 扩展
从上面的操作中可以看出Phoenix支持大多数标准的SQL语法。关于Phoenix支持的语法、数据类型、函数、序列等详细信息因为涉及内容很多可以参考其官方文档官方文档上有详细的说明
从上面的操作中可以看出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语言对其进行操作的时候就如同对其他关系型数据库一样下面给出基本的使用示例。
因为 Phoenix 遵循 JDBC 规范,并提供了对应的数据库驱动 `PhoenixDriver`,这使得采用 Java 语言对其进行操作的时候,就如同对其他关系型数据库一样,下面给出基本的使用示例。
### 4.1 引入Phoenix core JAR包
如果是maven项目直接在maven中央仓库找到对应的版本导入依赖即可
如果是 maven 项目,直接在 maven 中央仓库找到对应的版本,导入依赖即可:
```xml
<!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core -->
@ -196,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>
@ -217,8 +217,8 @@ public class PhoenixJavaApi {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
/*
* 指定数据库地址,格式为 jdbc:phoenix:Zookeeper地址
* 如果HBase采用Standalone模式或者伪集群模式搭建则HBase默认使用内置的Zookeeper默认端口为2181
* 指定数据库地址,格式为 jdbc:phoenix:Zookeeper 地址
* 如果 HBase 采用 Standalone 模式或者伪集群模式搭建,则 HBase 默认使用内置的 Zookeeper默认端口为 2181
*/
Connection connection = DriverManager.getConnection("jdbc:phoenix:192.168.200.226:2181");
@ -243,7 +243,7 @@ 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)
实际的开发中我们通常都是采用第三方框架来操作数据库,如 `mybatis``Hibernate``Spring Data` 等。关于 Phoenix 与这些框架的整合步骤参见下一篇文章:[Spring/Spring Boot + Mybatis + Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spring+Mybtais+Phoenix 整合.md)
# 参考资料