【大数据学习 | 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}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f680; MJ Prompt Creator主要功能适用场景优点缺点 &#x1f4af; 小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 任务说明 您是一款为幻灯片…

实现3D热力图

实现思路 首先是需要用canvas绘制一个2D的热力图&#xff0c;如果你还不会&#xff0c;请看json绘制热力图。使用Threejs中的canvas贴图&#xff0c;将贴图贴在PlaneGeometry平面上。使用着色器材质&#xff0c;更具json中的数据让平面模型 拔地而起。使用Threejs内置的TWEEN&…

ATom: 矿物粉尘在卷云形成中的主导作用

目录 ATom: Dominant Role of Mineral Dust in Cirrus Cloud Formation 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: Dominant Role of Mineral Dust in Cirrus Cloud Formation 简介 该数据集提供了&#xff1a;&#xff08;1&#xff09;由 NOAA 粒子分析…

C语言 | Leetcode C语言题解之第560题和为K的子数组

题目&#xff1a; 题解&#xff1a; // 暴力美学&#xff1a;20行C代码 int subarraySum(int *nums, int numsSize, int k) {int count 0;// 弄个大数组做个暴力的Hash表&#xff0c;大概4*20M*2160M。用calloc初始化为全零。int *maps (int *)calloc(1001 * 20001 * 2, siz…

基于vue框架的的社区居民服务管理系统8w86o(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;居民,楼房信息,报修信息,缴费信息,维修进度 开题报告内容 基于Vue框架的社区居民服务管理系统开题报告 一、研究背景与意义 随着城市化进程的加速&#xff0c;社区居民数量激增&#xff0c;社区管理面临着前所未有的挑战。传统的社区…

UE5.4 PCG 自定义PCG蓝图节点

ExecuteWithContext&#xff1a; PointLoopBody&#xff1a; 效果&#xff1a;点密度值与缩放成正比

[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

单链表算法题(数据结构)

1. 反转链表 https://leetcode.cn/problems/reverse-linked-list/description/ 题目&#xff1a; 看到这个题目的时候我们怎么去想呢&#xff1f;如果我们反应快的话&#xff0c;应该可以想到我们可以从1遍历到5然后依次头插&#xff0c;但是其实我们还有更好的办法&#xff…

Java代码审计-模板注入漏洞

一、模板引擎 在Java开发当中&#xff0c;为了将前端和后端进行分离&#xff0c;降低项目代码的耦合性&#xff0c;使代码更加易于维护和管理。除去以上的原因&#xff0c;模板引擎还能实现动态和静态数据的分离。 二、主流模板引擎 在Java中&#xff0c;主流的模板引擎有:Fre…

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-39/ 本关是堆…

《深度学习》——深度学习基础知识(全连接神经网络)

文章目录 1.神经网络简介2.什么是神经网络3.神经元是如何工作的3.1激活函数3.2参数的初始化3.2.1随机初始化3.2.2标准初始化3.2.3Xavier初始化&#xff08;tf.keras中默认使用的&#xff09;3.2.4He初始化 4.神经网络的搭建4.1通过Sequential构建神经网络4.2通过Functional API…

备战软考Day05-数据库系统基础知识

一、基本概念 1.数据库 数据库(Database&#xff0c;缩写为DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、较高的数据独立性和易扩展性&#xff0c;并可为各种用户共享。 2.数据…

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

NLP论文速读(NeurIPS2024)|使用视觉增强的提示来增强视觉推理

论文速读|Enhancing LLM Reasoning via Vision-Augmented Prompting 论文信息&#xff1a; 简介: 这篇论文试图解决的问题是大型语言模型&#xff08;LLMs&#xff09;在处理包含视觉和空间线索的推理问题时的局限性。尽管基于LLMs的推理框架&#xff08;如Chain-of-Thought及其…

在 RHEL 8 | CentOS Linux release 8.5.2111上安装 Zabbix 6

1. 备份YUM源文件 cd /etc/yum.repos.d/ mkdir bak mv C* ./bak/ wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo yum clean all yum makecache2. 将 SELinux 设置为宽容模式&#xff0c;如下所示。 sudo s…

在 Mac 和 Windows 系统中快速部署 OceanBase

OceanBase 是一款分布式数据库&#xff0c;具备出色的性能和高扩展性&#xff0c;可以为企业用户构建稳定可靠、灵活扩展性能的数据库服务。本文以开发者们普遍熟悉的Windows 或 Mac 环境为例&#xff0c;介绍如何快速上手并体验OceanBase。 一、环境准备 1. 硬件准备 OceanB…

【jenkins】jenkins使用pipeline配置django项目

目录 一、部署jenkins 二、配置 2.1 获取gitee账户凭证 2.2 安装pipeline插件 三、创建一个流水线项目 四、选择创建的项目 4.1 源码设置 4.2 配置 前言&#xff1a;个人使用&#xff0c;比较简单&#xff0c;做个笔记&#xff0c;这里我使用的是gitee作为仓库 一、部署…

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具&#xff0c;它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则&#xff0c;QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

macOS 设置固定IP

文章目录 以太网Wifi![请添加图片描述](https://i-blog.csdnimg.cn/direct/65546e966cae4b2fa93ec9f0f87009d8.png) 基于 macOS 15.1 以太网 Wifi

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序&#xff0c;比如时间序列数据&#xff08;股票价格、天气变化等&#xff09;、自然语言文本&#xff08;句子中的单词顺序&#xff09;、语音信号等。 1 统计工具 前面介绍…