HBase~读写操作的过程
读和写是Hbase的两种常见的基本操作,这两种操作都会涉及到Hfile和Meta表,我们依次看看。
Hfile
HFile是Hbase在HDFS中存储数据的格式,它有如下特性:
- 主标识是一个行健
- key按照有序的方式进行存储
- HFile仅仅分配给一个Region
- 行存储在Hfile上面,通过排好序的KeyValue存储在磁盘上
- 当MemStore超过它的限制的时候,会新产生一个HFile
- 在搜索数据的时候,不需要加载整个Hfile,可以使用Hfile的多层索引
- HDFS复制WAL和Hfile块,并且这是自动的
- 在每个Hfile中,最高的序列号被存储为meta Field
Meta表
在读数据的时候,Hbase需要知道要访问那个Region Server,因此在读数据的时候需要通过Meta表。
- Meta表也是一张Hbase的表,但是内部是一系列Region的信息
- 它的结构如下:
- Key:Region起始的key,Region Id
- Value: RegionServer信息
读写流程
- 客户端首先会根据配置文件中zookeeper地址连接zookeeper,并读取/
/meta-region-server节点信息,该节点信息存储HBase元数据(hbase:meta)表所在的RegionServer地址以及访问端口等信息。用户可以通过zookeeper命令(get / /meta-region-server)查看该节点信息。 - 根据hbase:meta所在RegionServer的访问信息,客户端会将该元数据表加载到本地并进行缓存。然后在表中确定待检索rowkey所在的RegionServer信息。
- 根据数据所在RegionServer的访问信息,客户端会向该RegionServer发送真正的数据读取请求。服务器端接收到该请求之后需要进行复杂的处理,具体的处理流程将会是这个专题的重点。
scanner体系
RegionServer接收到客户端的get/scan请求之后,构建scanner体系(实际上就是做一些scan前的准备工作),在此体系基础上一行一行检索。
scanner体系的核心在于三层scanner:RegionScanner、StoreScanner以及StoreFileScanner。三者是层级的关系,如下:
- 一个RegionScanner由多个StoreScanner构成,一张表由多个列族组成,就有多少个StoreScanner负责该列族的数据扫描。
- 一个StoreScanner又是由多个StoreFileScanner组成。每个Store的数据由内存中的MemStore和磁盘上的StoreFile文件组成,相对应的,StoreScanner对象会雇佣一个MemStoreScanner和N个StoreFileScanner来进行实际的数据读取,每个StoreFile文件对应一个StoreFileScanner,注意:StoreFileScanner和MemstoreScanner是整个scan的最终执行者。
HBase中KeyValue是什么样的结构?
HBase中KeyValue并不是简单的KV数据对,而是一个具有复杂元素的结构体,其中Key由RowKey,ColumnFamily,Qualifier ,TimeStamp,KeyType等多部分组成,Value是一个简单的二进制数据。Key中元素KeyType表示该KeyValue的类型,取值分别为Put/Delete/Delete Column/Delete Family等。KeyValue可以表示为如下图所示:
分类:
大数据
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2018-08-18 我的那些年(5)~我当教师了
2014-08-18 EF架构~LinqToEntity里实现left join的一对一与一对多
2011-08-18 今天抽点时间来说一个C#里的关键字及它们的原型