HBase整合Phoenix
创建软件目录
mkdir -p /opt/soft
cd /opt/soft
下载软件
wget https://dlcdn.apache.org/phoenix/phoenix-5.1.3/phoenix-hbase-2.5-5.1.3-bin.tar.gz
解压 hbase
tar -zxvf phoenix-hbase-2.5-5.1.3-bin.tar.gz
修改 hbase 目录名称
mv phoenix-hbase-2.5-5.1.3-bin phoenix
配置环境变量
vim /etc/profile
export PHOENIX_HOME=/opt/soft/phoenix
export PATH=$PATH:$PHOENIX_HOME/bin
使环境变量生效
source /etc/profile
复制jar文件到hbase/lib目录
scp /opt/soft/phoenix/phoenix-server-hbase-2.5-5.1.3.jar root@spark01:/opt/soft/hbase2/lib
scp /opt/soft/phoenix/phoenix-server-hbase-2.5-5.1.3.jar root@spark02:/opt/soft/hbase2/lib
scp /opt/soft/phoenix/phoenix-server-hbase-2.5-5.1.3.jar root@spark03:/opt/soft/hbase2/lib
重启HBase
stop-hbase.sh
start-hbase.sh
连接Phoenix
sqlline.py spark01,spark02,spark03
注意:会出现如下报错信息
/usr/bin/env: ‘python’: No such file or directory
whereis python3
# 这里是 whereis python3 的 提示信息
python3: /usr/bin/python3
ln /usr/bin/python3 /usr/bin/python
# 再次连接
sqlline.py spark01,spark02,spark03
显示所有表
使用 !table 或者 !tables
创建数据库
phoenix中没有database,有的是schema,相当于mysql中的数据库
create schema lihaozhe
会出现以下错误:
原因是需要在hbase的conf目录中的hbase-site.xml配置一个参数:
此参数是phoenix的schema和hbase的nameSpace命名空间做映射。
phoenix.schema.isNamespaceMappingEnabled将它设置成true
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
再次创建schema:
注意:schema “lihaozhe” 加双引号映射到hbase会是小写的,不加双引号默认都是大写的
create schema "lihaozhe";
创建表
https://phoenix.apache.org/columnencoding.html
unsigned_long
create table "tb_user"(
"user_id" varchar primary key,
"name" varchar,
"gender" varchar,
"home_address" varchar,
"company_address" varchar
);
create table "tb_emp"(
"emp_id" varchar primary key,
"info"."name" varchar,
"info"."gender" varchar,
"logistics"."home_address" varchar,
"logistics"."company_address" varchar
) COLUMN_ENCODED_BYTES = 0;
插入数据
upsert into "tb_user" values ('1001','lhz','1','jilin','shanxi');
upsert into "tb_emp" values ('1001','lhz','1','jilin','shanxi');
显示表
show tables;
删除表
drop table "tb_user";
表关联
准备
在 hbase 上创建表并插入数据
create 'lihaozhe:person', 'info', 'msg'
put 'lihaozhe:person','1001','info:name','user1001'
put 'lihaozhe:person','1001','info:gender','1'
put 'lihaozhe:person','1001','msg:slogan','hello world'
put 'lihaozhe:person','1002','info:name','user1002'
put 'lihaozhe:person','1002','info:gender','0'
put 'lihaozhe:person','1002','msg:slogan','hello'
put 'lihaozhe:person','1003','info:name','user1003'
put 'lihaozhe:person','1003','info:gender','1'
put 'lihaozhe:person','1003','msg:slogan','hi'
视图映射
create view "person"(
"person_id" varchar primary key,
"info"."name" varchar,
"info"."gender" varchar,
"msg"."slogan" varchar
) column_encoded_bytes=0;
select * from "person";
drop view "person";
表映射
- 当 HBase 中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view 改为 create table 即可。
- 当 HBase 中不存在表时,可以直接使用 create table 指令创建需要的表,系统将会自动在 Phoenix 和 HBase 中创建 person_infomation 的表,并会根据指令内的参数对表结构进行初始化。
create table "person"(
"person_id" varchar primary key,
"info"."name" varchar,
"info"."gender" varchar,
"msg"."slogan" varchar
) column_encoded_bytes=0;
select * from "person";
upsert into "person" values('1004','user1004','0','hw');
upsert into "person" ("person_id","gender") values('1001','0');
drop table "person";
退出
!quit