0 介绍

Phoenix 构建在 HBase 之上的开源 SQL 层. 能够让我们使用标准的 JDBC API 去建表, 插入数据和查询 HBase 中的数据, 从而可以避免使用 HBase 的客户端 API.在我们的应用和 HBase 之间添加了 Phoenix, 并不会降低性能, 而且我们也少写了很多代码。

1 特点

1) 将 SQl 查询编译为 HBase 扫描
2) 确定扫描 Rowkey 的最佳开始和结束位置
3) 扫描并行执行
4) 将 where 子句推送到服务器端的过滤器
5) 通过协处理器进行聚合操作
6) 完美支持 HBase 二级索引创建
7) DML命令以及通过DDL命令创建和操作表和版本化增量更改。
8) 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。
9) Phoenix 将 HBase 的数据模型映射到关系型世界

在这里插入图片描述

2 安装

1)下载
http://archive.apache.org/dist/phoenix
2)解压tar包

tar -zxvf apache-phoenix-4.14.2-HBase-1.3-bin.tar.gz 
mv apache-phoenix-4.14.2-HBase-1.3-bin phoenix-4.14.2

3)复制jar包
复制 HBase 需要用到 server 和 client 2 个 jar 包到hbase安装目录的lib目录下

cp phoenix-4.14.2-HBase-1.3-client.jar /root/software/hbase-1.3.1/lib/
cp phoenix-4.14.2-HBase-1.3-server.jar /root/software/hbase-1.3.1/lib/

4)同步集群jar包
在其他安装了Hbase的机器上,同样拷贝jar包到hbase的lib目录
5) 配置环境变量

export PHOENIX_HOME= /root/software/phoenix-4.14.2
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin

6)启动hadoop,zk,hbase
在这里插入图片描述
7)启动phoenix

/root/software/phoenix-4.14.2/phoenix » bin/sqlline.py master-1,master-2,slave-1:2181

在这里插入图片描述

3 Phoenix表操作

1)!table/tables显示所有表
在这里插入图片描述
2)创建表

CREATE TABLE IF NOT EXISTS us_population (
      state CHAR(2) NOT NULL,
      city VARCHAR NOT NULL,
      population BIGINT
      CONSTRAINT my_pk PRIMARY KEY (state, city));

说明:
① char类型必须添加长度限制
② varchar 可以不用长度限制
③ 主键映射到 HBase 中会成为 Rowkey. 如果有多个主键(联合主键), 会把多个主键的值拼成 rowkey
④ 在 Phoenix 中, 默认会把表名,字段名等自动转换成大写. 如果要使用小写, 需要把他们用双引号括起来.
在这里插入图片描述
在这里插入图片描述
3)插入记录

upsert into us_population values('NY','NewYork',8143197);
upsert into us_population values('CA','Los Angeles',3844829);
upsert into us_population values('IL','Chicago',2842518);

说明: upset可以看成是update和insert的结合体.
在这里插入图片描述
4)查询记录

select * from US_POPULATION;

在这里插入图片描述

select * from us_population where state='NY';

在这里插入图片描述
5)删除记录

delete from us_population where state='NY';

在这里插入图片描述
6)删除表

drop table us_population;

在这里插入图片描述
7)退出

! quit

4 phoenix映射

4.1 Phoenix 表和 HBase 表的关系

默认情况下, 直接在 HBase 中创建的表通过 Phoenix 是查不到的。如果要在 Phoenix 中操作直接在 HBase 中创建的表,则需要在 Phoenix 中进行表的映射。映射方式有两种: 1. 视图映射 2. 表映射

4.2 在 HBase 中创建表: test

test表有两个列簇name、company.
在这里插入图片描述
启动 HBase shell
创建表: test

 create 'test', 'name', 'company'

在这里插入图片描述
在 Phoenix 中是看不到这个表的:
在这里插入图片描述

4.3视图映射

Phoenix 创建的视图是只读的, 所以只能用来查询, 无法通过视图对数据进行修改等操作.

create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

在这里插入图片描述
此时查看,即可以看到hbase中新建的test表
在这里插入图片描述

4.4 表映射

使用 Phoenix创建对 HBase 的表映射,有两种方法:
当 HBase 中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view 改为 create table 即可。 在 HBase 中创建表:

create 'test1', 'name', 'company'

在这里插入图片描述
在 Phoenix 中创建关联表:

create table "test1"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0;

说明: 添加这个参数之后, 在 HBase 中添加的数据在 Phoenix 中也可以查询到. 否则 HBase 中添加的数据在 Phoenix 中查询不到.

在这里插入图片描述
当 HBase 中不存在表时,可以直接使用 create table 指令创建需要的表,系统将会自动在 Phoenix 和 HBase 中创建 person_infomation 的表,并会根据指令内的参数对表结构进行初始化。
此时在hbase的shell中向test1表插入数据

put 'test1','1001','name:firstname','alibaba'
put 'test1','1001','name:lastname','AL'
put 'test1','1001','company:name','ALIBABA'
put 'test1','1001','company:address','Hangzhou'

在这里插入图片描述
在phoenix中查看该表数据
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐