大数据组件之Phoenix 快速入门和基本用法
0 介绍Phoenix 构建在 HBase 之上的开源 SQL 层. 能够让我们使用标准的 JDBC API 去建表, 插入数据和查询 HBase 中的数据, 从而可以避免使用 HBase 的客户端 API.在我们的应用和 HBase 之间添加了 Phoenix, 并不会降低性能, 而且我们也少写了很多代码。1 特点1) 将 SQl 查询编译为 HBase 扫描2)确定扫描 Rowkey 的最佳开
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中查看该表数据
更多推荐
所有评论(0)