Hbase读写过程

本文详细介绍了Hbase的读写过程,包括客户端如何通过Zookeeper找到Meta表获取数据,以及写请求的步骤,如数据先写入HLog再进入Memstore,最后到Storefile。同时,阐述了Region的管理,包括Region的分配、Region Server的上线与下线,以及HMaster的角色和影响。此外,文章还提及了HBase的三个重要机制:flush、compact和split机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、读请求过程:
meta表是hbase系统自带的一个表。里面存储了hbase用户表的元信息。
元信息为meta表内记录一行数据是用户表一个region的start key 到endkey的范围。
meta表存储在regionserver里。 具体存储在哪个regionserver里?zookeeper知道。
过程:
1.客户端到zookeeper询问meta表在哪
2.客户端到meta所在的节点(regionserver)读取meta表的数据
3.客户端找到region 获取region和regionserver的对应关系,直接到regionserver读取region数据
查看meta表信息
hbase(main):011:0> scan ‘hbase:meta’

2、写请求过程:
1.Client先访问zookeeper,找到Meta表,并获取Meta表元数据。确定当前将要写入的数据所对应的HRegion和 HRegionServer服务器。
2.Client向该HRegionServer服务器发起写入数据请求。
3.Client先把数据写入到HLog,以防止数据丢失,然后将数据写入到Memstore。
4.Memstore达到阈值,会把Memstore中的数据flush到Storefile中
5.当Storefile越来越多,达到一定数量时,会触发Compact合并操作,将多个小文件合并成一个大文件。
6.Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,变成两个文件。

== 说明:hbasez 支持数据修改(伪修改),实际上是相同rowkey数据的添加。hbase只显示最后一次的添加==
3、Region管理:
region的分配过程
前提:一个region只能分配给一个region server
1.master记录了当前有哪些可用的region server。以及当前哪些region分配给了哪些region server,哪些region还没有分配。
2.当需要分配的新的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。
3.region server得到请求后,就开始对此region提供服务。
region server上线
前提:master使用zookeeper来跟踪region server状态。
1.当某个region server启动时,首先在zookeeper上的/hbase/rs目录下建立代表自己的znode。
2.master订阅了/hbase/rs目录上的变更消息,当/hbase/rs目录下的文件出现新增或删除操作时,master可以得到来自zookeeper的实时通知。因此一旦region server上线,master能马上得到消息
region server下线
前提:master使用zookeeper来跟踪region server状态。
1.当region server下线时,它和zookeeper的会话断开。
2.zookeeper而自动释放代表这台server的文件上的独占锁(znode)
3.zookeeper将变化发送给master
4.master 将挂掉的region server的region分配给其它还活着的regionserver
Hmaster的上线
前提:hbase集群中可以设置多个Hmaster,真正对外提供服务的只有一个
1.从zookeeper上获取唯一 一个代表active master的锁,用来阻止其它master成为真正的master。
2.扫描zookeeper上的/hbase/rs节点,获得当前可用的region server列表。
3.master和每个region server通信,获得当前已分配的region和region server的对应关系。 4.master扫描.META.表,计算得到当前还未分配的region,将他们放入待分配region列表。
Hmaster下线后的影响
master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群没有影响。表的数据读写还可以正常进行。
无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的 合并(region的split可以正常进行) 当hmaster下线后,启动Zookeeper的选举机制,选出新的Hmaster,新的Hmaster上线,执行上线流程。
4、HBase三个重要机制
1、flush机制
hbase.regionserver.global.memstore.size: 默认;大小的40%
regionServer的全局memstore的大小**(多个region),超过该大小会触发flush到磁盘的操作,flush时会阻塞客户端读写。
hbase主要用于海量数据的快速读写。读写的总内存是堆内存的80%,读占用堆内存的40%,写占用堆内存的40%,想提高哪个业务场景的效率,就提高相应的百分比。
hbase.hregion.memstore.flush.size: 默认:128M(单个region里memstore的缓存大小)
hbase.regionserver.optionalcacheflushinterval :默认:1h
集群调优:
hbase.regionserver.global.memstore.size.lower.limit: 默认0.95
hbase.hregion.preclose.flush.size:5M
hbase.hstore.compactionThreshold:默认: 3个
2、compact机制
当flush文件的数量达到3个,把小的storeFile文件合并成大的Storefile文件
3、split机制
当Region达到阈值(默认10G),会把过大的Region一分为二

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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值