Hbase读写数据的原理解析

本文详细介绍了HBase中数据的写入与读取流程,包括数据如何通过HLog和MemStore进入HDFS,以及客户端如何通过ZooKeeper定位数据位置。

目录

1、体系图

这里写图片描述
针对上图的一些解释:
这里面数据分区(region)存储是为了查询方便(即因为是集群所以能充分利用磁盘的IO性)。添加数据时,数据先进入Hlog–预写日志(数据只能追加不能修改)<防止数据丢失>,数据在Hlog写完后再写到内存中
HFile:认为是将数据进行序列化。
StoreFile:认为是一个文件。
DFS:调用HDFS的客户端API来将数据传到HDFS。

写数据的流程(参考上图):

1、客户端向hregionServer请求写数据
2、hregionServer将数据先写入hlog中。
3、hregionServer将数据后写入memstore中。
4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。
5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。并对Hlog做一个标记。
6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。
7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。
8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。注意:hlog会同步到HDFS中。

读数据的流程(参考下图):

1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。
2、数据从内存和硬盘合并后返回到客户端。
这里写图片描述

PS:由上图可看到,当客户端在执行查询语句的时候,会先到zk上寻找对应-ROOT表(主要描述-META表在哪里)的位置信息(由此也知道ZK在Hbase中的作用),接下来根据-ROOT表中数据进而找到对应的HRegionServer,在对应的HRegionServer上的-META表(主要记载表的元数据信息)中找到对应的Table表在哪个HRegionServer上,再到对应的HRegionServer中查找对应的数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值