hbase 集成 phoenix 实现 sql 化

1. 依赖

hbase => hbase 集群搭建

2. 下载安装包

点击下载

ps:该网页在内网可能打不开,遇到该情况有条件的可以打开 VPN 在下载

image-20240419144010832

3. 上传解压

使用工具将安装包上传的服务器上

笔者这里选择 上传到 /opt/software 目录,解压到 /opt/module 这两个目录可以随意选择

image-20240419144327703

tar -zxvf phoenix-hbase-2.4-5.1.3-bin.tar.gz -C /opt/module
cd /opt/module
mv phoenix-hbase-2.4-5.1.3-bin phoenix

image-20240419144737741

4. 安装服务器

phoenix 是依赖于 hbse 集群的,可以说只是 hbase 的皮肤

安装只需要将服务包放到 hbase 的 lib 依赖库里即可,注意一台集群都需要拷贝到位,可以先拷贝一台,借助分发脚本分发

cd /opt/module/phoenix
cp phoenix-server-hbase-2.4-5.1.3.jar /opt/module/hbase/lib/
xsync.sh /opt/module/hbase/lib

image-20240419144914014

PS:拷贝完成后一定要重启 hbase 集群

5. 客户端连接

# 第一次启动需要较长的时间,请耐心等待,这里的参数是 zookeepeer 集群连接 
cd /opt/module/phoenix
./bin/sqlline.py mitchell-101,mitchell-102,mitchell-103:2181# 测试命令,查看所有表,如果安装成功,我们应该能看到很多系统表
!table

image-20240419150032766

6. JDBC 连接

6.1. 客户端依赖

下方的依赖包目前在公共的中央仓库是不存在的,只有一些低版本的依赖,我们无法使用

这里我们只能将安装包解压出来的客户端安装到我们的 maven 中,如果有仓库的可以上传仓库

笔者这边选择安装到本地仓库

1,将解压后目录中的 客户端 下载到本地(如下图)

image-20240422104547881

2,使用 maven 命令安装

mvn install:install-file -DgroupId=org.apache.phoenix -DartifactId=phoenix-client -Dversion=2.4-5.1.3 -Dpackaging=jar -D file=phoenix-client-hbase-2.4-5.1.3.jar

3,在项目中使用

<!-- phoenix 客户端依赖 -->
<dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-client</artifactId><version>2.4-5.1.3</version>
</dependency>

6.2. 简单示例

package com.mitchell.mus.tests.main;import java.sql.*;
import java.util.Properties;public class PhoneixTests {public static void main(String[] args) throws SQLException {// 声明地址和参数配置String jdbcUrl = "jdbc:phoenix:mitchell-101,mitchell-102,mitchell-103:2181";Properties properties = new Properties();// 获取连接Connection conn = DriverManager.getConnection(jdbcUrl, properties);// 获取操作对象Statement statement = conn.createStatement();// 执行语句并获取返回结果ResultSet resultSet = statement.executeQuery("select * from system.catalog");// 打印返回的结果while (resultSet.next()) {String tableName = resultSet.getString("TABLE_NAME");String columnName = resultSet.getString("COLUMN_NAME");System.out.println(tableName + "." + columnName);}// 关闭连接resultSet.close();statement.close();conn.close();}}

7. 启用二级索引

7.1. 修改配置

cd /opt/module/hbase/conf/
vim hbase-site.xml

添加下方配置

<!-- 设置编解码器,通过在 WAL 日志中添加索引信息,是 phoenix 二级索引的前置配置 -->
<property><name>hbase.regionserver.wal.codec</name><value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>	  

PS:记得分发到所有集群节点,然后重启集群

7.2. 全局索引

-- 创建表,必须要主键,支持联合主键
CREATE TABLE IF NOT EXISTS HB_USER (ID   INTEGER PRIMARY KEY,NAME VARCHAR,AGE  INTEGER
);-- 新增/修改
UPSERT INTO HB_USER (ID, NAME, AGE) VALUES (1, '张三', 30);
UPSERT INTO HB_USER (ID, NAME, AGE) VALUES (2, '李四', 40);-- 创建全局索引
CREATE INDEX IX_USER ON HB_USER(AGE);-- 通过查看执行计划确定索引是否生效
EXPLAIN SELECT ID, AGE FROM HB_USER WHERE AGE = 30;
EXPLAIN SELECT ID, NAME, AGE FROM HB_USER WHERE AGE = 30;

全局索引会创建一张表,专门记录 索引字段 与 主键 的映射信息,查询的时候先查询索引表获取主键,在通过主键去取数据,从而提高查询效率,其比较适用于读多写少的应用场景。

但在查询时存在很大弊端:即想查询的字段如果不是索引字段的话,索引不会生效,比如例子中 id 主键,age 是索引,只查这两个字段索引可以生效,但是如果同时查询 name 的话索引就不生效了,如下图

image-20240419232047623

image-20240419232118372

7.3. 包含索引

为了解决全局索引的弊端,我们可以采取包含索引的方式,包含索引也是全局索引的一种,如果要使用全局索引建议使用包含索引

-- 删除索引
DROP INDEX IX_USER ON HB_USER;-- 创建包含索引,本质上就是将想要和该索引字段一起查询的字段 INCLUDE 进去
CREATE INDEX IX_USER ON HB_USER(AGE) INCLUDE (NAME);-- 查看执行计划
EXPLAIN SELECT ID, NAME, AGE FROM HB_USER WHERE AGE = 30;

image-20240419232645748

但是包含索引会让索引表的数据量变得很大

7.4. 本地索引(推荐)

本地索引不会创建表,数据都写在同一张表且是同一个 region 中,所以特别适合写操作频繁的表

-- 删除索引
DROP INDEX IX_USER ON HB_USER;-- 创建本地索引
CREATE LOCAL INDEX IX_USER ON HB_USER(AGE);-- 查看执行计划
EXPLAIN SELECT ID, NAME, AGE FROM HB_USER WHERE AGE = 30;

但是本地索引的查询性能要低于全局索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315144.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适用于Windows和Mac的十大误删除数据恢复软件

数据恢复是从辅助存储或可移动文件中找回丢失、删除或损坏的数据的过程。数据丢失的原因有很多。因此&#xff0c;有必要恢复已删除的数据。有各种可用的软件工具&#xff0c;使用户能够恢复任何类型的已删除数据。但是&#xff0c;任何数据恢复都有四个主要阶段。他们正在修复…

FastGPT编译前端界面,并将前端界面映射到Docker容器中

建议在linux系统下编译 1、克隆代码 git clone https://github.com/labring/FastGPT 2、进入FastGPT目录&#xff0c;执行 npm install 3、进入projects/app目录&#xff0c;执行 npm run dev 此时会自动下载依赖包&#xff0c;这里如果执行npm install的话&#xff0c;…

实现ALV页眉页脚

1、文档介绍 在ALV中&#xff0c;可以通过增加页眉和页脚&#xff0c;丰富ALV的展示。除了基本的页眉和页脚&#xff0c;还可以通过插入HTML代码的方式展示更加丰富的页眉和页脚&#xff0c;本篇文章将介绍ALV和OOALV中页眉页脚的使用。 2、ALV页眉页脚 效果如下 2.1、显示内…

开机流程+文件系统

linux的开机启动流程 1.开启电源 2.BIOS/UEFI 阶段&#xff1a; 计算机开机时&#xff0c;首先执行基本输入/输出系统 (BIOS) 或统一可扩展固件接口 (UEFI) 中的启动程序。 BIOS/UEFI 会进行自检 (POST)&#xff0c;初始化硬件设备&#xff0c;并检测可用的启动设备。 3.Boot…

MyBatis-Plus笔记——基础环境搭建

Spring 基础环境 Spring 基础环境 指的是 Spring MyBatis 辅助类 1.引入依赖 <properties> <maven.compiler.source>22</maven.compiler.source> <maven.compiler.target>22</maven.compiler.target> <project.build.sourceEncoding>…

mysql-sql-练习题-1

文章目录 环境注释建表 5张建库学生表课程表教师表分数表总表 语法书写顺序in学过/没学过完全相同 环境 Windows cmd&#xff08;普通用户/管理员&#xff09; mysql -uroot -pmysql版本&#xff0c;模式&#xff08;可自定义&#xff09; select version(),global.sql_mode…

Vue基础:为什么要学Vue3,Vue3相较于Vue2有那些优势?

为什么要学Vue3&#xff1f; 1.框架层面 1.响应式底层API的变化 Proxy 数组下标的修改 对象动态添加属性 解释说明&#xff1a;1.vue2采用的是Object.definePrototype&#xff0c;它每次只能对单个对象中的单个数据进行劫持&#xff0c;所以在Vue2中data()中的数据一多就要进行…

开启智慧之旅,AI与机器学习驱动的微服务设计模式探索

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;开启智慧…

PotatoPie 4.0 实验教程(21) —— FPGA实现摄像头图像二值化(RGB2Gray2Bin)

PotatoPie 4.0开发板教程目录&#xff08;2024/04/21&#xff09; 为什么要进行图像的二值化&#xff1f; 当我们处理图像时&#xff0c;常常需要将其转换为二值图像。这是因为在很多应用中&#xff0c;我们只对图像中的某些特定部分感兴趣&#xff0c;而不需要考虑所有像素的…

ASP.NET企业投资价值分析系统

摘 要 本文将影响股票投资价值的宏观因素、行业因素、企业内部等诸多因素予以量化分析&#xff0c;对钢铁板块和汽车板块各上市公司进行综合评估&#xff0c;为广大股民的投资方向和资金安全提供了有力的支持。本文还阐述了企业投资价值分析的必要性&#xff0c;说明了企业投…

Elasticsearch进阶篇(三):ik分词器的使用与项目应用

ik分词器的使用 一、下载并安装1.1 已有作者编译后的包文件1.2 只有源代码的版本1.3 安装ik分词插件 二、ik分词器的模式2.1 ik_smart演示2.2 ik_max_word演示2.3 standard演示 三、ik分词器在项目中的使用四、ik配置文件4.1 配置文件的说明4.2 自定义词库 五、参考链接 一、下…

FPGA 以太网通信UDP通信环回

1 实验任务 上位机通过网口调试助手发送数据给 FPGA &#xff0c; FPGA 通过 PL 端以太网接口接收数据并将接收到的数据发送给上位机&#xff0c;完成以太网 UDP 数据的环回。 2 系统设计 系统时钟经过PLL时钟模块后&#xff0c;生成了两种不同频率和相位的时钟信号&#…

PotatoPie 4.0 实验教程(28) —— FPGA实现sobel算子对摄像头图像进行边缘提取

什么是sobel算子&#xff1f; Sobel 算子是一种常用的边缘检测算子&#xff0c;用于在图像中检测边缘。它基于对图像进行梯度运算&#xff0c;可以帮助识别图像中灰度值变化较大的区域&#xff0c;从而找到图像中的边缘。 Sobel 算子通过计算图像的水平和垂直方向的一阶导数来…

基础SQL DQL语句

基础查询 select * from 表名; 查询所有字段 create table emp(id int comment 编号,workno varchar(10) comment 工号,name varchar(10) comment 姓名,gender char(1) comment 性别,age tinyint unsigned comment 年龄,idcard char(18) comment 身份证号,worka…

本地生活服务平台哪家强,怎么申请成为服务商?

当下&#xff0c;本地生活服务已经成为了多家互联网大厂布局的重要板块&#xff0c;在巨大的市场需求和强大的资本加持下&#xff0c;不少人都看到了本地生活服务平台广阔的前景和收益空间。在此背景下&#xff0c;许多普通人都跃跃欲试&#xff0c;想要成为本地生活服务商&…

ptyhon画图显示中文

import matplotlib.pyplot as plt import matplotlib# 设置中文字体 matplotlib.rcParams[font.sans-serif] [SimHei] matplotlib.rcParams[font.family]sans-serifplt.plot([1, 2, 3, 4]) plt.xlabel(这是x轴) plt.ylabel(这是y轴) plt.title(这是标题) plt.show()用这个代码…

计算机网络知识点

层次模型 IQS七层模型 TCP/IP 原理体系结构 应用层 应用层 应用层 表示层 运输层 运输层 会话层 网际层 网络层 运输层 网络接口层 数…

Bentley二次开发教程27-交互窗口-案例实战1-可视化矩形梁生成工具

为了展现在MicroStation二次开发中使用WinForm界面控件与MicroStation内的数据交互&#xff0c;这里我们使用三个案例进行展示&#xff0c;分别为可视化矩形梁生成工具&#xff0c;EC属性赋值工具与文件选择复制工具。 可视化矩形梁生成工具 该工具会根据用户输入的数据实时…

GAN详解,公式推导解读,详细到每一步的理论推导

在看这一篇文章之前&#xff0c;希望熟悉掌握熵的知识&#xff0c;可看我写的跟熵相关的一篇博客https://blog.csdn.net/m0_59156726/article/details/138128622 1. GAN 原始论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 放一张GAN的结构&#xff0c;如下&#xff1…

基于canal监听MySQL binlog实现数据增量同步

一、背景 业务反馈客服消息列表查询速度慢&#xff0c;有时候甚至要差不多20秒&#xff0c;急需优化提升速度。 二、方案 引入 首先&#xff0c;体验系统&#xff0c;发现查询慢的正是消息列表查询接口。 接着去看代码的设计&#xff0c;流程比较长&#xff0c;但从代码逻…