【HBase之轨迹】(3)Apache Phoenix 5.1.2 详细使用,像 MySQL 一样使用 SQL 语句操作 HBase(Shell 操作和 SpringBoot+MyBatis 整合)

本教程介绍如何使用Apache Phoenix 5.1.2进行SQL操作HBase,包括Phoenix的安装配置、Shell使用和SpringBoot+MyBatis的整合。内容涵盖Phoenix的DDL和DML操作、视图创建、索引类型以及SpringBoot应用中的实践。
摘要由CSDN通过智能技术生成


0. 前置

前一篇记录了 HBase 的 Shell 操作和 JavaAPI 操作,但操作过程还是较为繁琐
【HBase之轨迹】(2)使用 hbase命令 和 JavaAPI 操作 HBase(包括复杂查询–过滤器,HBase 工具类)

如果能像使用 MySQL 一样编写 SQL 操作数据库就好了,而 Phoenix 正是提供了这样一种支持

本篇将记录 Phoenix 的安装配置过程,Shell 使用和使用 SpringBoot+MyBatis 整合 Phoenix
配置过程中的一些常见错误已经在文中指出,有如 Phoenix 无法启动、缺少依赖、Command line too long、如何映射实体类等
避免走笔者已经走过的弯路,如果还发现新的问题欢迎留言


1. Apache Phoenix 简介

Apache Phoenix 是给予 HBase 的一个 SQL 引擎,通过提供 Jar 包拓展 HBase 的功能
支持使用 SQL 语句对 HBase 进行操作,底层是将 SQL 语言转化为 HBase 原生语句(如 scan get put 等)
同时还支持二级索引,底层基于 HBase 的协处理器,可以提升 HBase 的查询效率

Phoenix 作为一个数据源,在 Java 项目中的使用和 MySQL 一样,可以用 JDBC 进行连接,也可以使用 MyBatis 框架进行整合,像正常关系型数据库一样操作


2. 下载配置与启动

① 下载安装包

首先到官方下载页面:https://phoenix.apache.org/download.html
选择对应 HBase 版本的 Phoenix 版本进行下载
本文 Hbase 版本为 2.3.7,故选择如下:
在这里插入图片描述
在这里插入图片描述
进去第一各连接点击即可下载安装包,之后用 xftp 上传到服务器
或直接在服务器使用 wget https://... 下载

② 将 Phoenix 的 jar 包拷贝到 HBase lib 目录下

由于 Phoenix 只是作为 HBase 的拓展,而不是作为一个单独的程序
所以只需要将下载的一系列 jar 包拷贝到 HBase 的 lib 目录下,再简单配置一下就可以使用了

解压安装包后,可以先拷贝到一个服务器,再进行分发
▲ 注意:这里只拷贝 phoenix-server-hbase-2.3-5.1.2.jarphoenix-pherf-5.1.2.jar 两个就够了,把客户端也拷贝进去可能出大问题(我就被搞了可恶啊)

cp phoenix-server-hbase-2.3-5.1.2.jar /.../hbase-2.3.7/lib
cp phoenix-pherf-5.1.2.jar /.../hbase-2.3.7/lib
xsync /.../hbase-2.3.7/lib

③ 为 HBase 配置 Phoenix

修改 HBase 的 hbase-site.xml 配置文件,加上下列几个配置

<!-- 支持 HBase命名空间映射 -->
<property>
    <name>phoenix.schema.isNamespaceMappingEnabled</name>
    <value>true</value>
</property>

<!-- 支持索引预写日志编码 -->
<property>
	<name>hbase.regionserver.wal.codec</name>
	<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>

然后分发到各台服务器
如果是从前面用 docker 搭建集群来的,就不能直接分发了,因为每个容器的端口设置都不一样,如 16100 16101 16102 等,这就需要一个一个修改了

▲ 同时非常非常非常重要的
不仅仅需要修改 HBase 的 hbase-site.xml 文件
还需要修改 Phoenix bin 目录下的 hbase-site.xml 文件
Phoenix 目录下的原配置文件中只有 hbase.regionserver.wal.codec 一个配置
还需要和上边一样加上另一个配置,总之保证 Phoenix 自身的 hbase-site.xml 文件也要又以上两个配置

忘记加的后果:
启动 Phoenix sqlline.py 客户端时,卡住无反应
最后结果为 Phoenix 启动超时,HBase 的三个 HRegionServer 全部挂掉
查看 HBase logs 下的 Region 日志,可发现错误:
org.apache.phoenix.coprocessor.MetaDataEndpointImpl cannot be cast to com.google.protobuf.Service

配置完之后,重启 HBase(stop + start)

④ 启动 Phoenix

进入到 Phoenix 安装目录下的 bin 目录,执行如下

# 示例:./sqlline.py hadoop001:2181
./sqlline.py <master 服务器 IP 地址>:<Zookeeper 端口>

会进入到以下界面,先使用 !table 查看表
在这里插入图片描述
上面这些表都是 Phoenix 自动帮我们创建的,能看见就说明启动成功了
同时在 Web 端也能够看到:
在这里插入图片描述


3. Phoenix 命令行使用

① DDL 表的增删改查

(1)—— 创建表

▲ 注意:原 HBase 中的表不会自动映射到 Phoenix 中去,并不会在 Phoenix 中显示出来
但在 Phoenix 中创建相同名字的表,原表数据会导入到表中相应的列(列名一模一样),可以看到原先的数据

其中必须有一项设置为 PRIMARY KEY,表示该项作为 ROWKEY
且在 Phoenix 中,所有名字都会被自动转化成大写,如果需要保留小写,则需加上双引号
语法如下:

CREATE TABLE IF NOT EXISTS 表名 (
	ROWKEY名称  数据类型  PRIMARY KEY,
	列族名.列名  数据类型  NOT NULL,
	列族名.列名  数据类型,
	...
);
# 下面为可选设置,直接加在后边即可
CONPRESSION='xxx'(可以指定数据压缩方式,如 GZ)
SPLIT ON ('5', '10', '15') (预分区设置方法1,对于 rowkey 使用直接划分)
SALT_BUCKETS=10  (预分区设置方法2,直接设置 n 各预分区,这里是 10 个)

建表示例(直接客户端命令行运行)

CREATE TABLE IF NOT EXISTS "stardust" (
    "id"            VARCHAR PRIMARY KEY,
    "info"."name"   VARCHAR(20),
    "info"."kind"   VARCHAR(20),
    "inf
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值