HBase之全文检索Phoenix

news2024/11/16 10:15:58

HBase高手之路6-HBase之全文检索Phoenix

一、全文检索

在这里插入图片描述

二、全文检索工具phoenix简介

在这里插入图片描述

在这里插入图片描述

三、OLTP和OLAP

1. OLAP

在线分析处理系统,hadoop、hbase、hive提供支持

2. OLTP

在线事务处理系统,传统的关系数据库支持

四、Phoenix的安装

1. 下载

在这里插入图片描述

2. 上传服务器

在这里插入图片描述

3. 解压

在这里插入图片描述
在这里插入图片描述

4. 修改HBase的配置文件hbase-site.xml

在这里插入图片描述

5. 分发HBase的配置文件到其他节点

在这里插入图片描述

6. 复制依包

在这里插入图片描述

1) 复制phoenix的服务器端jar包到master和worker的hbase的lib文件夹下

复制到master1下

在这里插入图片描述
在这里插入图片描述

复制到master2下

在这里插入图片描述

在这里插入图片描述

复制到worker

在这里插入图片描述

在这里插入图片描述

2) 复制phoenix的客户端jar包到phoenix的客户端也就是node1的phoenix的bin文件夹下

在这里插入图片描述

3) 将配置好的hbase-site.xml文件复制到phoenix客户端也就是node1的phoenix的bin目录下

在这里插入图片描述

在这里插入图片描述

五、启动phoenix客户端

1. 启动zookeeper

在这里插入图片描述

2. 启动hdfs

在这里插入图片描述

3. 启动hbase

在这里插入图片描述

4. 启动phoenix

在这里插入图片描述
在这里插入图片描述

说明启动成功

5. 查看表

在这里插入图片描述

6. 查看HBase的web ui

在这里插入图片描述

六、Phoenix的基本使用

1. 创建表

语法:

create table if not exists 表名(

rowkey 名称 类型 primary key,

列簇名.列名 类型,

);

在实际操作中,先用vscode之类的编辑工具,写好相关的语句,然后再复制到phoenix中运行

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 查看表结构

语法:

!desc 表名
在这里插入图片描述

3. 删除表

语法:

drop table if exists 表名

在这里插入图片描述

4. 列名大小写的问题

l 如果在使用列簇、列名的时候没有添加双引号,Phoenix会自动转换为大写

在这里插入图片描述

l 如果要将列名改为小写,则要用双引号括起来

l 如果一旦加了双引号,后面任何使用该列的地方都得使用双引号,否则就会报错

5. 插入数据

在Phoenix中,插入数据并不是insert,而是upsert,相当于insert和update合起来的缩写,与HBase shell中的put相当于,如果数据存在则修改,如果不存在则插入

语法:

upsert into 表名(列簇名.列名,…) values(值1,…);

在这里插入图片描述

6. 查询数据

与标准的sql一样,在Phoenix中也是用select实现数据的查询
在这里插入图片描述

7. 修改数据

在Phoenix中,修改数据也使用upsert

语法:

upsert into 表名(列簇名.列名,…) values(值1,…);

在这里插入图片描述

8. 删除数据

在Phoenix中,删除数据与标准的sql一样,也是用delete from实现数据的删除

语法:

delete from 表名 where rowkey列名=值;

在这里插入图片描述

七、HBase的命名空间

1. 简介

类似与mysql和hive中的数据库,对数据进行分类存放,按照业务域来划分类别,这些不同的业务域就叫做命名空间(namespace)。

l 在HBase中有一个默认的命名空间叫做default,默认情况下,创建的表都在default命名空间下。

l 在HBase中还有一个命名空间,叫做hbase,用于存放系统的内建表(namespace,meta)

在这里插入图片描述

2. 创建命名空间

语法:

create_namespace 命名空间名

在这里插入图片描述

3. 列出命名空间

语法:

list_namespace

在这里插入图片描述

4. 查看命名空间详情

describe_namespace 命名空间名

在这里插入图片描述

5. 删除命名空间

语法:

drop_namespace 命名空间名

在这里插入图片描述

*注意:*

*删除命名空间时,必须在该命名空间下没有表,否则无法删除*

6. 在指定的命名空间下创建表

语法:

create “命名空间名:表名”,”列簇名”
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

*注意:*

*使用带有命名空间的表,用冒号将命名空间和表名连起来*

7. 添加数据到命名空间表

语法:

put “命名空间名:表名”,”rowkey”,”列簇名:列名”,值

在这里插入图片描述

八、列簇设计

HBase表的列簇的数量应该是越少越好,一般情况下,一个表只设计一个列簇

l 两个及以上的列簇,HBase的性能反而不好

l 一个列簇存储的数据达到Flush的阈值时,表中所有的列簇将同时进行Flush操作,这将带来不必要的IO开销,列簇越多,对整体性能的影响越大

九、版本设计

版本数一般设计为1,在一般情况下,如果对数据不做修改,只保留一个版本,可以节省大量的存储空间

在这里插入图片描述

十、数据压缩

1. 压缩算法

常见的压缩算法有LZO、SNAPPY、GZIP等,GZIP的压缩比最低,SNAPPY压缩比最高

2. 查看表的压缩算法

HBase中的表默认不适用压缩,进行数据压缩可以节省存储空间

在这里插入图片描述

3. 设置压缩算法

创建新表的时候
修改已有表的压缩算法
在这里插入图片描述

在这里插入图片描述

十一、ROWKEY设计原则

1. 避免使用递增行键/时序的数据

如果rowkey设计的都是按照顺序递增(例如:时间戳),这样当有很多的数据写入时,负载都在一台机器上。应该尽量将写入的数据均衡到各个RegionServer上。

2. 避免rowkey和列的长度过大

l hbase中,要访问一个值,需要rowkey、列簇和列名,如果这些太长,就会占用较大的内存。

l rowkey的最大长度是64kb**,建议越短越好**

3. 使用long等类型比String类型更节省空间

long类型为8个字节,可以保存非常大的无符号数据,例如:174489340923423422424。如果使用字符串保存的话,是按照一个字符一个字节的方式,需要3倍多的存储空间。

4. rowkey唯一性

l 设计rowkey时,必须保证它的唯一性。

l 如果不唯一,因为hbase采用key-value的存储方式,若向hbase的一张表中插入相同rowkey的数据,则原来的数据会被新的数据覆盖

5. 避免数据热点

1) 热点

是指大量的客户端直接访问(可能是读,也可能是写)集群的一个或者几个节点,可能会使得某个节点超出承受能力,出现宕机或者不可用的情况,导致整个集群性能的下降。

2) 预分区

默认情况下,一个hbase表只有一个分区(region),被托管在一个RegionServer中

在这里插入图片描述
在这里插入图片描述

3) start key和end key

每个region有两个重要的属性:start key和end key,标识这个region维护的rowkey的范围。如果只有一个region,这它们都为空,没有边界。所有的数据都会存放在这个region中。但数据很大的时候,会将region通过去一个mid key来分成两个region。

4) 预分区的个数

预分区的个数=节点的倍数,如果有三个节点,则预分区的个数为6。

默认region的大小为10G,假如进行预估接下来的一年时间数据的大小为10T,则需要的预分区数=10*1000G/10G=1000个region。

5) rowkey避免数据热点设计

l 反转策略

将rowkey翻转,或者直接将尾部的字符串提前到rowkey的开头

在这里插入图片描述

优点:实现简单

缺点:可以使得rowkey呈现一定的随机性,但是牺牲了rowkey的有序性,利于get操作,不利于scan操作。

l 加盐(salt)策略

在原来的rowkey的前面加上固定长度的随机数,这个随机数就叫做盐,这样使得rowkey具有随机性

优点:rowkey的随机性能保障数据在所有的regionserver之间的负载均衡

缺点:因为添加的是随机数,基于原来的rowkey查询时无法知道随机数是什么,会影响查询速度,不适合数据的读取

l 哈希(hash)策略

是对整个rowkey或其部分进行hash操作,然后将hash后的字符串替换真格rowkey或者rowkey的前缀部分,hash算法一般有MD5、sha1、sha256或者sha512D等

优点:同加油策略

缺点:也是不利于scan操作,因为打乱了rowkey原有的自然顺序

十二、设置预分区

1. 指定start key和end key来分区

1) 创建预分区

语法:

create “test:t1”,‘C1’,SPLITS=>[‘10’,‘20’,‘30’,‘40’]

在这里插入图片描述

2) hbase的web ui查看分区的占用情况

在这里插入图片描述

点击t1表,查看详情
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 指定分区的数量、分区策略

1) 创建预分区

create “test:t2”,“C1”,{NUMREGIONS=>6,SPLITALGO=>‘HexStringSplit’}

在这里插入图片描述

2) hbase的web ui查看分区的占用情况

在这里插入图片描述

点击t2查看详情

在这里插入图片描述

3) 分区数量

一般按照数据量来预估或者根据节点数的倍数来设定

4) 分区策略

l HexStringSplit:rowkey是采用十六进制字符串作为前缀

l DecimalStringSplit:rowkey采用十进制数字字符串作为前缀

l UniformStringSplit:rowkey的前缀是随机的

十三、Phoenix的视图

Phoenix的视图就是对已经创建的HBase****表建立映射关系,从而实现对已有表的快速查询

1. 创建视图

语法:

create view if not exists “命名空间名”.“表名” (

“Rowkey 类型****r primary key,

列簇”.“列名 类型**,**

列簇”.“列名 类型

……

);

create view “phoenix_table_mapping_user_info_test”

(

user_id varchar primary key,

“name”.“firstname” varchar,

“name”.“lastname” varchar,

“company”.“name” varchar,

“company”.“address” varchar

);

在这里插入图片描述

2. 查询数据

在这里插入图片描述

select * from “命名空间名”.“表名” where 条件;

在这里插入图片描述

十四、二级索引

一般情况下,Hbase会根据rowkey建立索引,来提供查询的速度,这样的索引叫做一级索引。如果根据name进行查询,因为没有根据name建立索引,所以查询效率比较低,这是可以给name来创建二级索引。

1. 索引分类

l 全局索引

l 本地索引

l 覆盖索引

l 函数索引

1) 全局索引

l 全局索引适用于读多写少的业务

l 全局索引主要的负载发生在写入操作时,比如upsert、delete,Phoenix会拦截数据表的更新,构建索引更新,开销比较大

l 读取时,Phoenix会选择最快的能够查询出数据的索引。

l 全局索引一般要跟覆盖索引搭配使用

语法:

create index 索引名称 on 表名(列名1,列名2……);

举例:

create index idxname on ORDER_1(CATEGORY);
在这里插入图片描述

*注意:*

***Phoenix******中的索引,其实底层还是******Hbase****的表结构,这些索引表是专门用来加快查询速度。*

在这里插入图片描述

2) 本地索引

l 本地索引适合写操作频繁的场景

l 在本地索引中,索引数据和业务表数据存储在同一个服务器上,加快写入的速度

l 本地索引的数据是保存在一个影子列簇中

创建语法:

create local index 索引名称 on 表名(列名1,列名2……);

3) 覆盖索引

可以不需要在找到索引条目后返回到主表中,可以将关心的数据捆绑在索引行中,从而节省了读取的时间开销。

创建语法:

create index 索引名称 on 表名(列名1,列名2……) include(列名3);

create index idxcombo on ORDER_DETAIL1(CATEGORY,STATUS,PAY_MONEY) include(USER_ID);

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4) 函数索引

适用于高版本的phoenix,可以基于任意表达式(函数)创建索引

语法

create index 索引名称 on 表名(函数名(列名1),列名2……);

2. 创建索引

在这里插入图片描述

3. 根据索引查询数据

select USER_ID,ID,PAY_MONEY from ORDER_DETAIL1 where USER_ID=“494419”;

在这里插入图片描述

4. 删除索引

drop index 索引名 on 表名

drop index IDXCOMBO on ORDER_DETAIL1;

在这里插入图片描述

5. 查看索引

在这里插入图片描述

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

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

相关文章

企业数字化转型的核心是什么?如何才能真正做到数字化转型?

什么是数字化转型?如何才能做到数字化转型? 好像大家一直在讨论,但仍然没有一个明确的答案。 这其实很正常: 因为“数字化”一词对不同的企业来说有不同含义。它可以是从采用新技术——引入自动化操作中的任何一样东西。此外,“…

《一次性分割一切》阅读笔记

目录 0 体验 1 摘要 2 十个问题 参考文献 0 体验 体验地址:SEEM - a Hugging Face Space by xdecoder 体验结果: 将哈士奇和汽车人从图片中分割出来。 1 摘要 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如…

HCIP之RSTP、MSTP

目录 RSTP 相较于802.1D改进 改进1:变更了端口角色 改进点2:修改了端口的状态类型 改进3:对配置BPDU的报文内容进行修改 改进点4:对配置BPDU的处理 改进点5:快速收敛机制 改进点6:拓扑变更机制的改进…

用户画像系列——HBase 在画像标签过期策略中的应用

一、背景 前面系列文章介绍了用户画像的概念、用户画像的标签加工、用户画像的应用。本篇文章主要介绍一些画像的技术细节,让大家更加详细的了解画像数据存储和处理的逻辑 举个现实中的例子: 例子1:因为疫情原因,上线一个平台(…

使用chatgpt探索XSS问题

首先问的问题是:XSS的类型有哪些?如何有效地预防? 回答的结果来看,还是比较中规中矩的。 紧接着,第二个问题:“XSS的三种类型的区别是什么?” 只是从形成原理上分析了不同,但是&…

服务器空间不足处理与解决思路—实战docker占用空间太大

前言 服务器Centos操作系统,空间不足的问题处理了三次了,决定把它的解决思路和处理过程记录下来。服务器空间不足是一个经常会遇到的问题,尤其是在大型应用程序和网站上。当服务器空间不足时,应该采取一些步骤来处理和解决这个问…

AWT_绘图_组件绘图原理

组件绘图原理: 之前我们已经学习过很多组件,例如Button、Frame、Checkbox等等,不同的组件,展现出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。 在AWT中,真正提…

idea使用 ( 三 ) 常用配置

4.常用配置 4.1.Settings 配置 接 2.3.2.设置配置 也可以 从菜单选择 设置配置 File > Settings 打开配置窗口 其中 Appearance & Behavior : 外观 与 行为 Keymap : 快捷键 Editor : 编辑器 Plugins : 插件 Version Control : 版本控制 Build, Execution,…

数据库系统--并发控制

文章目录 一、为什么要并发控制1.2 并发控制解决的问题1.2.1 脏读1.2.2 幻读1.2.3 不可重复读1.2.4 数据丢失问题 二、事务调度及可串行性2.1 事务2.1.1 事务的宏观2.1.2 事务的微观2.1.3 事务的特性 ACID 2.2 事务调度与可串行性2.3 冲突可串行化判定 三、基于封锁的并发控制方…

【MySQL高级】——存储引擎

一、查看存储引擎 show engines;二、设置系统默认的存储引擎 <1> 查看默认的存储引擎 show variables like %storage_engine%; #或 SELECT default_storage_engine;<2> 修改默认的存储引擎 1. 命令方式 SET DEFAULT_STORAGE_ENGINEMyISAM;2. 配置文件方式 …

研读Rust圣经解析——Rust learn-13(并发)

研读Rust圣经解析——Rust learn-13&#xff08;并发&#xff09; 并发创建新线程使用 join 等待所有线程结束线程获取环境所有权通过消息传递传送数据创建通道发送|接收消息隐式调用recv 共享状态并发通过使用互斥器Mutex创建Mutex共享MutexArc<T>原子引用计数 使用 Syn…

top命令学习

文章目录 一、top命令回显信息含义1、第一行2、第二行3、第三行4、第四行5、第五行6、第六行进程信息 二、top简单交互1、按数字“1”&#xff0c;显示列出所有cpu的信息2、按“M”&#xff0c;按内存使用率从大到小排序3、按“P”&#xff0c;按CPU使用率从大到小排序 一、top…

深度学习基础知识-感知机+神经网络的学习

参考书籍&#xff1a;&#xff08;找不到资源可以后台私信我&#xff09; 《深度学习入门&#xff1a;基于Python的理论与实现 (斋藤康毅)》 《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 机器学习…

(转)mysql数据库安装指南

如果你的电脑是mac&#xff0c;参考社群会员 奔跑的土豆 的分享&#xff1a; https://http://zhuanlan.zhihu.com/p/37942063232 赞同 162 评论文章 如果你的电脑是windows&#xff0c;参考下面的安装步骤。 一、下载mysql数据库 进入MySQL官方网站&#xff08;MySQL Co…

ARM Cortex-R52 通用中断控制器GIC:Generic Interrupt Controller(一)

ARM Cortex-R52 GIC:Generic Interrupt Controller 前言&#xff1a;名词解释 英文缩写英文全称&#xff08;中文释义&#xff09;GICgeneral interrupt controllerITSInterrupt Translation Service:用来解析中断SPIShared Peripheral InterruptsPPIPrivate peripheral inte…

BM40-重建二叉树

题目 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和 vin 均无重复…

超算云服务深度学习环境配置及使用方法

目录 一、环境配置 1. 通过SSH连接服务器 2. 查看服务器已安装模块 3. 调用Anaconda模块 4. 创建Python3.7的虚拟环境&#xff08;不是必须。不需要的话可以使用默认安装的环境&#xff09; 5. 虚拟环境下安装CUDA11.6Pytorch1.12.1 二、使用方法 1、提交作业 2、其他…

CKA证书模拟考试24道题

CKA证书模拟24道题-题解 快捷别名 alias kkubectl # will already be pre-configured export do"--dry-runclient -o yaml" # k create deploy nginx --imagenginx $do export now"--force --grace-period 0" # k delete p…

FPGA学习_01_基础知识(有点劝退,心灵弱小者勿入)

有些人喜欢直接拿开发板看教程开干&#xff0c;我认为了解点历史发展没什么坏处&#xff0c;一些FPGA的基础知识也是同样重要的。 1.1. FPGA的主要厂商 XILINX 占据FPGA绝大部分的市场份额 ALTERA 被 INTEL 167亿美元收购 改名为INTEL LATTICE 被神秘的中国公…

成就客户 | 企业如何培养“数据文化”?Smartbi教你3个步骤

随着数字化浪潮的发展&#xff0c;越来越多企业在实际工作中通过采用BI等各种数据处理工具提升工作效率。诚然&#xff0c;BI 工具可以帮助员工更好地理解和分析数据&#xff0c;从而发现业务中的机遇和挑战&#xff0c;然而如果仅仅只是提供工具和技术&#xff0c;而不重视培养…