【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
1. hbase的读数据流程
在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息
HFILE
存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小,描述,k和v的均匀长度,文件中包含的开始的key和结束的key,以及中位数key,等信息便于检索,以及布隆过滤器等信息,这个数据在我们hbase进行查询读取的时候按照64KB为一个大小进行读取内容数据,其中读取的元数据会全部加载,但是kv类型的真正存储数据会按照64KB为最小单位读取进来。
# flush表的数据,清空memstore
flush <table>
# 查看命令为
hbase hfile -m -b -p -f <hfile的文件路径>
-m 打印元数据信息
-b 打印块信息
-p 打印数据内容
-f 后面接文件
例子:hfile的文件路径:
查看某一列的数据信息:
布隆过滤器:
一个使用hash表作为计算规则的过滤器,也就是在写入数据到hbase的时候要先将数据写出到memstore中,在memstore写满了以后就会将数据以storeFile形式写出到磁盘上,这个时候也会生成一份对应数据的hash表文件,以metablock的形式存储到起来,它的功能非常实用,比如我们在查询数据的时候就可以首先将这个数据进行hash处理,然后和hash表进行比对,如果不存在可以直接避免扫描这个storeFile文件。在巨大的数据面前可以进行高效的数据。
一句话:查询数据的时候将对其进行哈希处理,然后与哈希地图进行比对,如果哈希表取到的值为空,说明storeFile没有该要查询的数据,如果哈希表找到的值不为空,也不一定存在要查询的数据。
blockCache
对应表数据的regionserver级别的缓存组件,主要使用规则就是在查询数据的时候也会将查询结果缓存到regionserver对应的blockCache组件中,下次查询的时候可以直接使用上次查询的结果,blockCache中存储的数据内存包含索引文件,布隆过滤器的值和数据的key,其他的value数据,会以64Kb为大小进行存储,如果数据过期了先清理value的数据,而索引等数据和元数据信息不会清理出去。
blockCache是regionserver级别的缓存组件,我的hbase集群只有两个工作节点,即存在两个regionserver,每个regionserver都存在一个blockCache,所以我desc info表会出现两条记录。
所以hbase的读写数据流程为:
读取数据流程
- 首先读取zookeeper中的元数据meta表的信息
- 其次根据meta表的信息找寻相应的region获取元数据信息
- 然后将meta表的元数据信息放入到自己的客户端缓存中
- 根据meta表的信息找寻student表对应的region所在的regionserver
- 然后根据查询的内容先去memstore文件中找寻数据
- 如果没有再去blockcache缓存中找寻数据,但是并不是直接将数据返回,而是通过key和索引文件去storeFile中查询比对,不然会出现数据过期问题
- 都没有再从storeFile和hfile中找寻数据,这个过程会使用到布隆过滤器
- 然后在将数据存储到blockcache中然后在返回给客户端
2. hbase读取数据
在hainiu命名空间创建student表:
hbase:007:0> put 'hainiu:student','001','cf1:name','1'
Took 0.0828 seconds
hbase:008:0> put 'hainiu:student','002','cf1:name','2'
Took 0.0173 seconds
hbase:009:0> put 'hainiu:student','001','cf1:age','10'
Took 0.0267 seconds
hbase:010:0> put 'hainiu:student','002','cf1:age','20'
Took 2.0660 seconds
hbase:011:0> scan 'hainiu:student'
ROW COLUMN+CELL 001 column=cf1:age, timestamp=2024-11-11T19:15:07.044, value=10 001 column=cf1:name, timestamp=2024-11-11T19:14:40.544, value=1 002 column=cf1:age, timestamp=2024-11-11T19:15:18.621, value=20 002 column=cf1:name, timestamp=2024-11-11T19:14:54.939, value=2
2 row(s)
Took 0.1542 seconds
hbase:012:0> put 'hainiu:student','001','cf2:adress','beijin'
Took 0.0695 seconds
hbase:013:0> put 'hainiu:student','002','cf2:adress','beijin'
Took 0.0147 seconds
hbase:014:0> scan 'hainiu:student'
ROW COLUMN+CELL 001 column=cf1:age, timestamp=2024-11-11T19:15:07.044, value=10 001 column=cf1:name, timestamp=2024-11-11T19:14:40.544, value=1 001 column=cf2:adress, timestamp=2024-11-11T19:15:52.033, value=beijin 002 column=cf1:age, timestamp=2024-11-11T19:15:18.621, value=20 002 column=cf1:name, timestamp=2024-11-11T19:14:54.939, value=2 002 column=cf2:adress, timestamp=2024-11-11T19:16:03.664, value=beijin
2 row(s)
Took 0.0241 seconds
# get 获取一个内容按照rowkey查询数据
get 'hainiu:student','001'
# get 获取对应列族的数据
get 'hainiu:student','001','cf1'
# get 获取对应列的信息
get 'hainiu:student','001','cf1:name'
hbase:017:0> get 'hainiu:student','001'
COLUMN CELL cf1:age timestamp=2024-11-11T19:15:07.044, value=10 cf1:name timestamp=2024-11-11T19:14:40.544, value=1 cf2:adress timestamp=2024-11-11T19:15:52.033, value=beijin
1 row(s)hbase:019:0> get 'hainiu:student','001','cf1'
COLUMN CELL cf1:age timestamp=2024-11-11T19:15:07.044, value=10 cf1:name timestamp=2024-11-11T19:14:40.544, value=1
1 row(s)
Took 0.0321 seconds
hbase:020:0> get 'hainiu:student','001','cf1:name'
COLUMN CELL cf1:name timestamp=2024-11-11T19:14:40.544, value=1
1 row(s)
Took 0.0231 seconds
# scan扫描表的数据
scan table
# 扫描limit
scan 'hainiu:student', {LIMIT => 2}
# 扫描指定的列族
scan 'hainiu:student',{COLUMNS=>'cf1'}
# 扫描指定的列
scan 'hainiu:student',{COLUMNS=>'cf1:age'}
hbase:022:0> scan 'hainiu:student',{COLUMN=>'cf1'}
ROW COLUMN+CELL 001 column=cf1:age, timestamp=2024-11-11T19:15:07.044, value=10 001 column=cf1:name, timestamp=2024-11-11T19:14:40.544, value=1 002 column=cf1:age, timestamp=2024-11-11T19:15:18.621, value=20 002 column=cf1:name, timestamp=2024-11-11T19:14:54.939, value=2
2 row(s)
Took 0.0588 seconds
hbase:023:0> scan 'hainiu:student',{COLUMN=>'cf1:age'}
ROW COLUMN+CELL 001 column=cf1:age, timestamp=2024-11-11T19:15:07.044, value=10 002 column=cf1:age, timestamp=2024-11-11T19:15:18.621, value=20
2 row(s)
# 过滤器查询
scan 'hainiu:student', FILTER=>"ValueFilter(=,'binary:20')"
# 指定列等值查询
scan 'hainiu:student',{COLUMNS=>'cf1:age',FILTER=>"ValueFilter(!=,'binary:20')"}
# 范围查询
scan 'hainiu:student', { STARTROW => '001', STOPROW => '003'}
# 分页查询
scan 'hainiu:student', {COLUMNS => 'cf1', LIMIT => 2, STARTROW => '001'}
# 范围查询指定相应的列信息
scan 'hainiu:student', { STARTROW => '001', STOPROW => '002', COLUMN => 'cf1:name'}
在范围查询中,从rowKey的[STARTROW, STOPROW)为范围查询,左闭右开区间,包含STARTROW,但不包含STOPROW。
行数查询
# 查询表的行数
# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;
# CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
count 'hainiu:student'
# 直接查询完毕返回值
count 'hainiu:student', {INTERVAL => 2,CACHE=>50}
# 间隔两秒返回一次结果值
每间隔50秒,一次性取50行ky。
大表统计
# 大表统计的时候不能使用hbase自带的count命令,这样hbase压力太大
# 我们可以通过外置的mr进行计算统计大小
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename'
多版本查询
#修改设置版本,查询时,加上版本就可以查出来版本
alter 'hainiu:student',{ NAME =>'cf1', VERSIONS => 2 }put 'hainiu:student','id10', 'cf1:name','name10a'
put 'hainiu:student','id10', 'cf1:name','name10aa'
put 'hainiu:student','id10', 'cf1:name','name10aaa'#此时,可以查询出2个版本的数据
get 'hainiu:student', 'id10', { COLUMN =>'cf1:name', VERSIONS => 2}
相关文章:

【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小&…...

A027-基于Spring Boot的农事管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...

Redisson的可重入锁
初始状态: 表示系统或资源在没有线程持有锁的情况下的状态,任何线程都可以尝试获取锁。 线程 1 获得锁: 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁: 在持有锁的情况下,线程 1 再次请求锁&a…...
SQL Server Service Broker完整示例
目录 准备 创建Message,Contract,Queue和Service 创建调用存储过程 启用SQL Agent并创建Job执行存储过程 调用demo 常见故障排除 准备 判断你的数据库YourDatabaseName是否启用了Service Broker SELECT is_broker_enabled FROM sys.databases WH…...

CentOS7 升级OpenSSH9.0全过程和坑
近日,漏洞肆虐,需要升级新版本,才能解决漏洞。故有此文: 0 查看当前版本 [root@host-testsvc openssh-9.0p1]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 20171、在data下新建一个独立目录openssh目录,用来存放软件 [root@host-testsvc data]# mkdir openssh…...

RSTP的配置
RSTP相对于STP在端口角色、端口状态、配置BPDU格式、配置BPDU的处理方式、快速收敛机制、拓扑变更机制和4种保护特性方面的详细改进说明: 端口角色: STP中定义了三种端口角色:根端口(Root Port)、指定端口࿰…...
力扣257:二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","1->3"]示例…...
Tcl 和 Python 在二次开发研究
引言 Tcl(Tool Command Language)和 Python 都是广泛应用于各种领域的编程语言,特别是在二次开发和自动化开发方面,两者有着独特的特性。Tcl 是一种动态的脚本语言,早期主要用于集成和控制其他程序,因此它经常出现在嵌入式应用和图形用户界面(GUI)开发中。而 Python 是…...
【NLP优化】Ubuntu 20.04 下 源码安装 CasADi + Ipopt / acados
20241114 记录一下 Ubuntu 20.04 下安装 MPC 中两种常用开源 NLP 优化器 CasADi + Ipopt / acados 可以新建一个文件夹,保存所有源码安装下载的代码 mkdir ~/mpc_dep1. 安装依赖 # **IPOPT** sudo apt-get install gcc g++ gfortran git patch wget pkg-config libmetis-de…...
[241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5
目录 微软发布多智能体系统 Magentic-One社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5 微软发布多智能体系统 Magentic-One 微软研究院近日发布了一个名为 Magentic-One 的多智能体系统,旨在解决复杂的现实世界任务。这个系统展现了令人兴奋的潜力&#…...

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码
当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…...

MySQL查询执行(六):join查询
到底可不可以使用join 假设存在如下表结构: -- 创建表t2 CREATE TABLE t2 (id int(11) NOT NULL,a int(11) DEFAULT NULL,b int(11) DEFAULT NULL,PRIMARY KEY (id),KEY a (a) ) ENGINEInnoDB;-- 向t2写入1000条数据 drop procedure idata; delimiter ;; create pr…...
python习题练习
python习题 编写一个简单的工资管理程序系统可以管理以下四类人:工人(worker)、销售员(salesman)、经理(manager)、销售经理(salemanger)所有的员工都具有员工号,工资等属性,有设置姓名,获取姓名,获取员工号,计算工资等…...
MySQL高级(二):一条更新语句是如何执行的
执行步骤 1. 解析 SQL 语句 MySQL 首先会解析你输入的 UPDATE 语句。解析器会检查语法是否正确,并将 SQL 语句转化为内部的数据结构(通常是语法树)。 示例 SQL 语句: UPDATE employees SET salary 5000 WHERE department Sa…...
在 Ubuntu 18.04 中搭建和测试 DNS 服务器
在 Ubuntu 18.04 中搭建和测试 DNS 服务器可以通过安装和配置 BIND(Berkeley Internet Name Domain)来实现。以下是详细的步骤: 1. 安装 BIND 打开终端并运行以下命令来安装 BIND: sudo apt update sudo apt install bind9 bin…...

算法学习第一弹——C++基础
早上好啊,大佬们。来看看咱们这回学点啥,在前不久刚出完C语言写的PTA中L1的题目,想必大家都不过瘾,感觉那些题都不过如此,所以,为了我们能更好的去处理更难的题目,小白兔决定奋发图强࿰…...

javaWeb小白项目--学生宿舍管理系统
目录 一、检查并关闭占用端口的进程 二、修改 Tomcat 的端口配置 三、重新启动 Tomcat 一、javaw.exe的作用 二、结束javaw.exe任务的影响 三、如何判断是否可以结束 结尾: 这个错误提示表明在本地启动 Tomcat v9.0 服务器时遇到了问题,原因是所需…...

如何优化Elasticsearch的查询性能?
优化Elasticsearch查询性能可以从以下几个方面进行: 合理设计索引和分片: 确保设置合理的分片和副本数,考虑数据量、节点数和集群大小。根据数据量和节点数量调整分片数量,避免使用过多分片,因为每个分片都需要额外的…...
蓝桥杯每日真题 - 第12天
题目:(数三角) 题目描述(14届 C&C B组E题) 解题思路: 给定 n 个点的坐标,计算其中可以组成 等腰三角形 的三点组合数量。 核心条件:等腰三角形的定义是三角形的三条边中至少有…...
从H264视频中获取宽、高、帧率、比特率等属性信息
背景 最近整理视频编解码的代码,早前在jetson上封装了jetson multimedia作为视频编解码的类,供其他同事和其他组使用,但该解码接口有一个问题,无法首先获取视频宽高信息,更无法直接获取视频的帧率、比特率等信息。 解…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...