phoenix5.3.1整合hbase2.6.6
创建软件目录
bash
mkdir -p ~/opt
cd ~/opt/
下载软件
bash
wget -P ~/opt https://downloads.apache.org/phoenix/phoenix-5.3.1/phoenix-hbase-2.6-5.3.1-bin.tar.gz
解压 hbase
bash
tar -zxvf ~/opt/phoenix-hbase-2.6-5.3.1-bin.tar.gz -C ~/opt
修改 hbase 目录名称
bash
mv ~/opt/phoenix-hbase-2.6-5.3.1-bin ~/opt/phoenix
配置环境变量
bash
vim ~/.profile
bash
export PHOENIX_HOME=$HOME/opt/phoenix
export PATH=$PATH:$PHOENIX_HOME/bin
完整
bash
export NODE_HOME=$HOME/opt/node-v24
export JAVA_HOME=$HOME/opt/jdk-25
export MAVEN_HOME=$HOME/opt/maven
export SCALA_HOME=$HOME/opt/scala-2
export ZOOKEEPER_HOME=$HOME/opt/zookeeper-3
export HDFS_NAMENODE_USER=lhz
export HDFS_SECONDARYNAMENODE_USER=lhz
export HDFS_DATANODE_USER=lhz
export HDFS_ZKFC_USER=lhz
export HDFS_JOURNALNODE_USER=lhz
export HADOOP_SHELL_EXECNAME=lhz
export YARN_RESOURCEMANAGER_USER=lhz
export YARN_NODEMANAGER_USER=lhz
export HADOOP_HOME=$HOME/opt/hadoop-3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HIVE_HOME=/home/lhz/opt/hive-4
export HCATALOG_HOME=/home/lhz/opt/hive-4/hcatalog
export HBASE_HOME=$HOME/opt/hbase-2
export PHOENIX_HOME=$HOME/opt/phoenix
export PATH=$PATH:$NODE_HOME/bin:$JAVA_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HCATALOG_HOME/bin:$HCATALOG_HOME/sbin:$HBASE_HOME/bin:$PHOENIX_HOME/bin
使环境变量生效
bash
source ~/.profile
删除帮助文档
bash
rm -rf $PHOENIX_HOME/docs
复制jar文件到hbase/lib目录
bash
scp $PHOENIX_HOME/phoenix-server-hbase-2.6-5.3.1.jar lhz@lihaozhe01:$HBASE_HOME/lib
scp $PHOENIX_HOME/phoenix-server-hbase-2.6-5.3.1.jar lhz@lihaozhe02:$HBASE_HOME/lib
scp $PHOENIX_HOME/phoenix-server-hbase-2.6-5.3.1.jar lhz@lihaozhe03::$HBASE_HOME/lib
分发 phoenix
bash
scp -r ~/opt/phoenix lhz@lihaozhe02:~/opt
scp -r ~/opt/phoenix lhz@lihaozhe03:~/opt
修改 hbase 修改配置文件
注意:Phoenix 咱不支持 JDK25 故而降低 hbase配置JDK版本为17
JDK17
bash
# 1. 下载 JDK 17
wget -P /home/lhz/opt/ https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
# 2. 解压
tar -xzf /home/lhz/opt/jdk-17_linux-x64_bin.tar.gz -C /home/lhz/opt/
mv /home/lhz/optjdk-17.0.19 /home/lhz/optjdk-17
# 3. 修改 hbase-env.sh
export JAVA_HOME=/home/lhz/opt/jdk-17
# 4. 重启 HBase
stop-hbase.sh && start-hbase.sh
hbase 环境变量
bash
vim hbase-env.sh
bash
export JAVA_HOME=/home/lhz/opt/jdk-17
export HBASE_CLASSPATH=/home/lhz/opt/hadoop-3/etc/hadoop
export HBASE_MANAGES_ZK=false
export HBASE_HEAPSIZE=1G
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
hbase 配置文件
bash
vim hbase-site.xml
xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- HBase数据存储目录,mycluster是根据hdfs-site.xml的dfs.nameservices的value进行配置 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://lihaozhe/hbase</value>
</property>
<!-- HBase Master端口 -->
<property>
<name>hbase.master</name>
<value>8020</value>
</property>
<!-- zookeeper集群地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>lihaozhe01:2181,lihaozhe02:2181,lihaozhe03:2181</value>
</property>
<!-- 是否开启分布式部署,true表示分布式模式,false表示单机模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 是否启用HDFS流能力检查,设置为false可以避免因流能力检查导致的启动异常 -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!-- 是否启用Phoenix Schema与HBase Namespace映射,开启后Phoenix的schema对应HBase的namespace -->
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<!-- 是否将Phoenix系统表映射到HBase Namespace,需配合phoenix.schema.isNamespaceMappingEnabled使用 -->
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
<!-- HBase WAL编码器,使用IndexedWALEditCodec以支持Phoenix的二级索引 -->
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
</configuration>
分发配置文件到其它节点
bash
scp -r $HBASE_HOME/conf lhz@lihaozhe02:$HBASE_HOME
scp -r $HBASE_HOME/conf lhz@lihaozhe03:$HBASE_HOME
重启HBase
bash
stop-hbase.sh
start-hbase.sh
连接Phoenix
bash
sqlline.py lihaozhe01,lihaozhe02,lihaozhe03
注意:会出现如下报错信息
bash
/usr/bin/env: 'python': No such file or directory
bash
whereis python3
bash
# 这里是 whereis python3 的 提示信息
python3: /usr/bin/python3
bash
sudo ln /usr/bin/python3 /usr/bin/python
bash
# 再次连接
sqlline.py lihaozhe01,lihaozhe02,lihaozhe03
显示所有数据库
sql
show schemas;
显示所有表
使用 !table 或者 !tables
sql
show tables;
创建数据库
phoenix中没有database,有的是schema,相当于mysql中的数据库
sql
create schema "lihaozhe";
sql
use "lihaozhe";
创建表
https://phoenix.apache.org/columnencoding.html
unsigned_long
sql
create table "tb_user"(
"user_id" varchar primary key,
"name" varchar,
"gender" varchar,
"home_address" varchar,
"company_address" varchar
);
sql
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;
插入数据
sql
upsert into "tb_user" values ('1001','lhz','1','jilin','shanxi');
sql
upsert into "tb_emp" values ('1001','lhz','1','jilin','shanxi');
显示表
sql
show tables;
删除表
sql
drop table "tb_user";
表关联
准备
在 hbase 上创建表并插入数据
bash
create 'lihaozhe:person', 'info', 'msg'
bash
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'
视图映射
sql
create view "person"(
"person_id" varchar primary key,
"info"."name" varchar,
"info"."gender" varchar,
"msg"."slogan" varchar
) column_encoded_bytes=0;
sql
select * from "person";
bash
select "info"."name" from "person";
sql
drop view "person";
表映射
- 当 HBase 中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create table 改为 create view 即可。
- 当 HBase 中不存在表时,可以直接使用 create table 指令创建需要的表,系统将会自动在 Phoenix 和 HBase 中创建 person_infomation 的表,并会根据指令内的参数对表结构进行初始化。
sql
create table "person"(
"person_id" varchar primary key,
"info"."name" varchar,
"info"."gender" varchar,
"msg"."slogan" varchar
) column_encoded_bytes=0;
sql
select * from "person";
sql
upsert into "person" values('1004','user1004',0,'hw');
sql
upsert into "person" ("person_id","gender") values(1001,0);
sql
drop table "person";
退出
bash
!quit