Hbase的读写流程

读流程:

1.Client访问zookeeper,获取Hbase:meta所在HregionServer的节点信息

2.Client访问Hbase:meta所在的HregionServer,获取Hbase:meta记录的元数据后先加载到内存中,然后再从内存中查询出RowKey所在的Hregion

3.Client对RowKey所在的Hregion对应的HregionServer发起读取数据的请求

4.HregionServer构建RegionScanner ,用于对该Hregion的数据检索

5.RegionScanner构建storeScanner(Hregion中有多少个Store就需要构建多少个storeScanner,store的数量取决于table的ColumnFamily的数量),用于对该列族的数据检索

6.所有的storeScanner合并构建最小堆(已排序的完全二叉树)StoreHeap:PriorityQueue

7.storeScanner构建一个MemStoreScanner和一个或多个StoreFileScanner

8.过滤掉能够确定所要查询的 RowKey 一定不在的 StoreFileScanner 或 MemStoreScanner(布隆过滤器);

9.经过筛选后留下的 Scanner 开始做读取数据的准备,将对应的 StoreFile 定位到满足的 RowKey 的起始位置;

10.将所有的 StoreFileScanner 和 MemStoreScanner 合并构建最小堆 KeyValueHeap:PriorityQueue,排序的规则按照 KeyValue 从小到大排序;

11.从 KeyValueHeap:PriorityQueue 中经过一系列筛选后一行行的得到需要查询的 KeyValue。

默认情况下:先从 BlockCache 查找数据,如果没有,再从 MemStore 上查找,如果 MemStore 中也没有,再到 StoreFile 上进行查找。其 中 StoreFile 的扫瞄先会使用 Bloom Filter 过滤那些不可能符合条件的 HFile,然后使用 Data Block Index 快速定位 Cell,并将其加载到 BlockCache 中,然后从 BlockCache 中读取,目的是为了加快后续的查询,然后在返回结果给客户端。

写流程:

1.Client 访问 ZooKeeper,获取 hbase:meta 所在 HRegionServer 的节点信息;

2.Client 访问 hbase:meta 所在的 HRegionServer,获取 hbase:meta 记录的元数据后先加载到内存中,然后再从内存中查询出 RowKey 所在 的 HRegion (HRegion 所在的 HRegionServer); 3.Client 对 RowKey 所在的 HRegion 对应的 HRegionServer 发起写入数据请求;

4.建立连接后,首先将 DML 要做的操作写入到日志 HLog;

5.然后将数据的修改更新到 MemStore 中,本次操作结束。一个 HRegion 由多个 Store 组成,一个 Store 对应一个列族,Store 包括位于内存 中的 Memstore 和位于磁盘的 StoreFile,写操作先写入 MemStore;

当 MemStore 数据达到阈值后(默认 128M),创建一个新的 MemStore; 旧的 MemStore 将刷写为一个独立的 StoreFile(HRegionServer 会启动 FlushCache 进程写入 StoreFile)并存放到 HDFS,最后删除 HLog 中 的历史数据。

HDFS (Hadoop Distributed File System) 和 HBase 是 Apache Hadoop 生态系统中的两个重要组件,它们在分布式数据存储和处理中有各自的角色。 HDFS 读写流程大致如下: 1. **客户端发起请求**:用户通过 HDFS API 向 NameNode 发出文件操作请求(如读取或写入),NameNode 负责全局文件系统的元数据管理。 2. **元数据查询**:NameNode 接收请求后,验证权限并返回文件块的位置信息给客户端。 3. **数据定位**:客户端根据 NameNode 提供的信息找到 DataNode 的地址列表。 4. **数据传输**:客户端将数据分片(Block)发送到相应的 DataNode,并记录副本数以保证数据冗余。 5. **DataNode 数据接收和处理**:当 DataNode 收到数据后,将其写入磁盘并更新自身的块列表。 6. **读取过程**:如果需要读取数据,客户端同样先向 NameNode 查询文件位置,然后从 DataNode 获取数据。 HBase读写流程: 1. **客户端连接**:客户端通过 Java API 或其他客户端库连接到 ZooKeeper 集群获取 HBase Master 的地址。 2. **表和行键查询**:客户端将表名、行键发送到 Master,Master 返回 RegionServer 的位置。 3. **RegionServer定位**:客户端找到负责该 Region 的 RegionServer。 4. **数据读写**:对于写入操作,客户端将请求发送到 RegionServer,RegionServer 将数据写入 MemStore,之后可能会触发 Compaction 过程,将 MemStore 中的数据刷入 HFile 到硬盘;读取操作则直接从 HFile 中查找数据。 5. **结果返回**:读写完成后,结果通过网络返回给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据界一个小小的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值