文章目录
Phoenix简介
- 构建在Apache HBase之上的一个SQL中间层
- 可以在Apache HBase上执行SQL查询,性能强劲
- 较完善的查询支持,支持二级索引,查询效率较高
Phoenix优势
- Put the SQL back in NoSQL, 程序员熟知SQL语句
- 具有完整ACID事务功能的标准SQL和JDBC API的强大功能
- 完全可以和其他Hadoop产品例如Spark, Hive, Pig, Flume以及MapReduce集
Phoenix vs Hive
为什么phoenix快
- 通过HBase协处理器,在服务端进行操作,从而最大限度的减少客户端和服务器的数据传输
- 通过定制的过滤器对数据进行处理
- 使用本地的HBase Api而不是通过MapReduce框架,这样能最大限度的降低启动成本
Phoenix功能特性
- 二级索引:抛弃之前的只能根据rowkey做索引,通过过滤器删选数据;自由根据索引的列或者表达式形成备用的行键更方便的进行数据的查找
- 多租户:通过多租户表和租户专用的链接使用户只能访问自己的数据
- 用户定义函数:自己实现DF;像select一样使用
- 行时间戳列:可以将hbase每行的时间戳映射成Phoenix的一个列
- 分页查询:标准的sql分页语法
- 视图:标准sql语法(Phoenix可以使用多个虚拟表共享底层的物理表)
Phoenix安装
- 下载对应版本的安装包
http://phoenix.apache.org/download.html - 配置与现有HBase集群集成重新
解压后如下操作
如果是分布式则应拷贝到每个reginserver下
cp phoenix-core-4.14.1-HBase-1.2.jar ../hbase-1.2.0-cdh5.14.4/lib/
cp phoenix-4.14.1-HBase-1.2-server.jar ../hbase-1.2.0-cdh5.14.4/lib/
- 启动HBase环境,并测试环境是否可以正常使用
前置条件启动HDFS
启动hbase
最后启动phoenix(bin/./sqlline.py)
Phoenix实战:shell命令操作Phoenix
进入shell
创建表
插入数据phoenix插入是upsert与普通sql不同
插入列
插入数据
复杂sql语句
Phoenix实战:java jdbc操作Phoenix
引入依赖
<dependencies>
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.13.1-HBase-1.2</version>
</dependency>
</dependencies>
package com.kun.bigdata.phoenix.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class PhoenixTest {
public static void main(String[] args) throws Exception {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
Connection connection = DriverManager.getConnection("jdbc:phoenix:localhost:2181");
PreparedStatement statement = connection.prepareStatement("select * from PERSON");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("NAME"));
}
statement.close();
connection.close();
}
}
通过mybatis操作Phoenix
引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId