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.mzph.cn/diannao/3006.shtml

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

相关文章

spring security登录认证授权

spring security登录认证授权 是什么 Spring Security 主要实现了Authentication&#xff08;认证&#xff0c;解决who are you? &#xff09; 和 Access Control&#xff08;访问控制&#xff0c;也就是what are you allowed to do&#xff1f;&#xff0c;也称为Authorizat…

C语言扫雷游戏完整实现(下)

文章目录 前言一、排雷函数菜单二、排雷函数菜单的实现三、拓展棋盘功能四、源码1. test.c源文件2. game.h头文件3. game.c源文件 总结 前言 C语言实现扫雷游戏的排雷菜单&#xff0c;以及功能的实现&#xff0c;拓展棋盘功能&#xff0c;以及源码等。 上半部分的链接地址: C语…

python 笔记ast.literal_eval

1 介绍 ast.literal_eval 是 Python 标准库 ast 模块中的一个函数&#xff0c;用于安全地评估表示 Python 字面量或容器&#xff08;如列表、字典、元组、集合&#xff09;的字符串 import ast # 解析并执行一个数字表达式 num ast.literal_eval("3.14") prin…

新媒体运营-----短视频运营-----PR视频剪辑----软件基础

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1.1 PR软件重置与初始化设置1.2 新建项目及序列设置1.3 PR工作区的管理方法1.4 导入4K超高清视频并与ME配合工作1…

远程监控与控制的融合:吊车远程视频监控与远程开机的实现

随着信息技术的飞速发展&#xff0c;远程控制技术已经广泛应用于各个领域&#xff0c;包括工业、医疗、教育等。吊车远程视频监控作为远程控制的一种具体应用&#xff0c;不仅实现了对吊车操作的实时监控&#xff0c;还通过与远程开机功能的结合&#xff0c;进一步提升了远程控…

ctfshow web41-web50

web41 代码审计 <?php if(isset($_POST[c])){$c $_POST[c]; if(!preg_match(/[0-9]|[a-z]|\^|\|\~|\$|\[|\]|\{|\}|\&|\-/i, $c)){eval("echo($c);");} }else{highlight_file(__FILE__); } ?> 过滤了&#xff1a;[0-9] [a-z] ^ ~ $ [ ] { } & -…

Python自动化系统6

元素的特征:根据页面设计规则&#xff0c;有些特征是唯一 开发遵循了这个规则 id :类比身份证号―仅限于当前页面 username username 注意:如果id 不是固定的话&#xff0c;就不能使用来定位! xpath: 1、绝对路径&#xff1a;/html/body/div/div/div[1]/a/b --根节点&#xff…

初始Maven

1.背景 问题引入&#xff1a;为什么要使用 Maven&#xff1f; 1.1 添加第三方 jar 包 在 JavaEE 开发领域&#xff0c;有大量的第三方框架和工具可以供我们使用。使用这些 jar 包最简单的方法就是复制粘贴到 WEB-INF 目录中的 lib 目录下。但是会导致每次创建一个新工程就需要将…

基于python+django+mysql农业生产可视化系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

数据结构系列-堆排序当中的T-TOK问题

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 之前我们讲到了堆排序的实现逻辑&#xff0c;那么接下来我们重点关注的就是其中的T-TOK问题 T-TOK说简单点&#xff0c;就是说&#xff0c;假如有10000个数据&#xff08;随机的…

Vue3后台管理系统推荐

目录 项目概述 &#x1f35f; 项目展示 功能特点 &#x1f957; 结语 &#x1f4a8; 项目概述 &#x1f35f; 基于Vue 3框架与Element-Plus UI组件库技术精心构建的后端管理模板。该模板系统已成功实现一个基础的权限管理模块&#xff0c;宗旨在于为追求高效二次开发的开发…

hsql数据库(HyperSQL )(简单了解一下)

文章目录 一、HyperSQL &#xff08;HSQLDB&#xff09;1、HSQLDB是什么2、安装事务提一嘴特点看官网Datagrip连接HSQLDBMaven地址使用场景 参考文章 一、HyperSQL &#xff08;HSQLDB&#xff09; 1、HSQLDB是什么 HSQLDB (Hyper SQL Database)是一个用Java编写的关系数据库管…

SpringBoot---------整合Mybatisplus

快速入门 第一步&#xff1a;导入依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency> 第二步&#xff1a;编写mapper…

【C++题解】1632. 需要几辆车

问题&#xff1a;1632. 需要几辆车 类型&#xff1a;分支 题目描述&#xff1a; 学校有 n 位同学要外出旅游&#xff0c;一辆大巴车可以坐 30 人&#xff0c;请问需要几辆大巴车&#xff1f; 输入&#xff1a; 一个整数 n&#xff0c;代表同学的总人数。 输出&#xff1a;…

明日方舟游戏助手:一键完成日常任务 | 开源日报 No.233

MaaAssistantArknights/MaaAssistantArknights Stars: 11.6k License: AGPL-3.0 MaaAssistantArknights 是一款《明日方舟》游戏的小助手&#xff0c;基于图像识别技术&#xff0c;支持一键完成全部日常任务。 刷理智、掉落识别及上传企鹅物流智能基建换班、自动计算干员效率…

STM32 串口打印乱码(Cubemx)

STM32 串口打印乱码&#xff08;Cubemx&#xff09; 时钟配置错误&#xff0c;CubeMX默认的外部晶振是25MHz&#xff0c;而板载的晶振为8MHzSTM32F407修改程序将外部25M晶振修改为8M&#xff08;标准库、HAL库&#xff09; 核心问题 芯片型号与晶振配置&#xff1a;使用的ST…

网络安全-Diffie Hellman密钥协商

密钥协商是保密通信双方&#xff08;或更多方&#xff09;通过公开信道来共同形成密钥的过程。一个密钥协商方案中&#xff0c;密钥的值是某个函数值&#xff0c;其输入量由两个成员&#xff08;或更多方&#xff09;来提供。密钥协商的记过是参与协商的双方&#xff08;或更多…

【linux】Linux第一个小程序-进度条

1. 预备知识&#xff1a;回车和换行 回车&#xff08;Carriage Return&#xff0c;CR&#xff09;&#xff1a; 在早期的机械打字机中&#xff0c;回车指的是将打字机的打印头移回到行首的操作&#xff0c;这样打印头就可以开始新的一行的打印。在ASCII编码中&#xff0c;回车用…

AIGC-stable-diffusion(文本生成图片)+PaddleHub/HuggingFace

功能 stable-diffusion(文本生成图片)PaddleHub&#xff0c;HuggingFace两种调用方式 PaddleHub 环境 pip install paddlepaddle-gpu pip install paddlehub 代码 from PIL import Image import paddlehub as hub module hub.Module(namestable_diffusion)## 保存在demo…

NXP恩智浦 S32G电源管理芯片 VR5510 安全概念 Safety Concept (万字长文详解,配21张彩图)

NXP恩智浦 S32G电源管理芯片 VR5510 安全概念 Safety Concept (万字长文详解&#xff0c;配21张彩图) 1. 简介 本应用笔记描述了与S32G处理器和VR5510 PMIC相关的安全概念。该文档涵盖了S32G和VR5510的安全功能以及它们如何相互作用&#xff0c;以确保对ASIL D安全完整性级别…