【大数据学习 | 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作为视频编解码的类,供其他同事和其他组使用,但该解码接口有一个问题,无法首先获取视频宽高信息,更无法直接获取视频的帧率、比特率等信息。 解…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...