HBase 工作机制及读写流程

HBase

一图看懂 HBase 架构

HBase 最常用的shell操作

HBase 工作机制及读写流程



前言

本篇博客,为大家梳理 HBase 工作机制及读写流程。HBase 工作机制涉及 Master 工作机制和RegionServer 工作机制;读写流程涉及Region split分裂机制和compact 合并机制。过程难免枯燥乏味,但结果却很充实。


HBase 工作机制

HBase 工作机制涉及 Master 工作机制和RegionServer 工作机制。

Master工作机制

Master 的工作机制也分为上线和下线两种。

Master 上线

HBase集群中可以设置多个Hmaster,真正对外提供服务的只有一个。这是HBase集群 Master 上线 的前提条件。

HBase 高可用集群多个Hmaster设置步骤如下:

  • 关闭 hbase: stop-hbase.sh
  • 在conf目录下创建backup-masters文件:写入本机的hostname
  • 将backup-masters文件拷贝至其他节点同目录
  • 不要在非主机上启动hbase: start-hbase.sh

配置成功结果如下:
在这里插入图片描述

Master启动进行以下步骤:

  1. 从zookeeper上获取唯一 一个首先获得 active master的排他锁,用来阻止其它master成为真正的Master。

  2. 扫描zookeeper上的/hbase/rs节点,通过zookeeper集群协调监督的特性(主要通过心跳包机制)获得当前可用的region server列表。

  3. Master和每个region server通信,获得当前已分配的region和region server的对应关系。

  4. Master扫描META表,计算得到当前还未分配的region,将他们放入待分配region列表。

从 Master 的上线过程可以看到,Master 保存的信息全是可以冗余的信息(都可以从系统其它地方(WAL)收集或者计算得到)。因此,一般 HBase 集群中总是有一个 Master 在提供服务,还有一个以上的 Master 在等待时机抢占它的位置。

Master下线

master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群几乎没有影响。表的数据读写还可以正常进行。

Hmaster下线后的影响有无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的合并(region的split可以正常进行,它只有 RegionServer 参与)。

当Master下线后,启动Zookeeper的选举机制,选出新的Master,新的Master上线,执行上线流程。

RegionServer 工作机制

RegionServer 工作机制的前提条件是 Master 使用 ZooKeeper集群 来跟踪 RegionServer 状态。

Region 管理

任何时刻,一个Region只能分配给一个RegionServer。具体如下:

  • Master记录了当前有哪些可用的RegionServer。以及当前哪些Region分配给了哪些RegionServer,哪些Region还没有分配。
  • 当需要分配的新的Region,并且有一个RegionServer上有可用空间时,Master就给这个RegionServer发送一个装载请求,把Region分配给这个RegionServer。
  • RegionServer得到请求后,就开始对此Region提供服务。

region server上线

当某个 RegionServer 启动时,会首先在 ZooKeeper 上的 server 目录下创建一个代表自己的临时 ZNode,相当于抢占了server文件的独占锁。由于 Master 订阅了 server 目录下的变更消息(Watcher),当 server 目录下的文件出现新增或删除操作时,Master 可以得到来自 ZooKeeper 的实时通知,并将实时信息和操作记录到HLog文件中。因此一旦 RegionServer 上线,Master 就能马上得到消息。

region server下线

当 RegionServer 下线时,它和 ZooKeeper 的会话就会断开,ZooKeeper 会自动删除代表这台 RegionServer 的 ZNode,意味着该台 RegionServer 自动释放了 server 文件的独占锁(ZNode),也就是说Master 就可以确定这台 RegionServer 节点挂了。

无论出现哪种情况,RegionServer 都无法继续为它的 Region 提供服务了,此时,ZooKeeper 会将该台节点的变化信息反馈给Master,Master收到反馈, 就会将这台 RegionServer 上的未完成的 Region 任务分配给其它还活着的 RegionServer。

HBase 读写流程

HBase 读流程

HBase meta表

meta表存储了所有用户HRegion的位置信息,meta表内记录一行数据是用户表一个region的start key 到endkey的范围。meta表存储在一个zookeeper 知道的一个regionserver里。

HBase meta表 是HBase 读流程 寻址的关键所在。具体步骤如下图所示:

在这里插入图片描述

如上图HBase meta 寻址的过程一致,HBase 读流程具体步骤如下:

  1. 客户端通过 ZooKeeper 以及META表找到目标数据所在的 RegionServer(就是数据所在的 RegionServer 的主机地址);

  2. 客户端发生查询请求:联系 RegionServer 查询目标数据,然后 RegionServer 定位到目标数据所在的 Region,将信息反馈给RegionServer ;

  3. 客户端直接读取装载目标数据的 RegionServer读取 Region的结果数据。

此外, RegionServer 查询目标数据,会因为相同的cell(RowKey/ColumnFamily/Column相同)可能存在3个不同的位置,即Block Cache,MemStore,HFile中读取目标数据。具体如下图所示:

在这里插入图片描述
总结如下:

  • 从Block Cache中读取
  • 从MemStore中读取
  • 从多个HFile中读取,用Bloom Filter筛掉明显不存在所需数据的HFile,Index用于快速定位HFile中的数据块

HBase 写流程

Client先访问zookeeper,找到Meta表,并获取Meta表元数据。确定当前将要写入的数据所对应的HRegion和HRegionServer服务器。Client向该HRegionServer服务器发起Put写入数据请求,在HRegionServer中它首先会将该Put操作写入WAL日志文件中,以防止数据丢失。

在这里插入图片描述

当写完WAL日志文件后,HRegionServer根据Put中的TableName和RowKey找到对应的HRegion,并根据Column Family找到对应的HStore,并将Put写入到该HStore的MemStore中。写入成功,返回给客户端。

HBase读写流程如下: 1. 客户端向 HMaster 发送请求,获取对应表的 HRegionServer 列表。 2. 客户端根据 HRegionServer 列表,向对应的 HRegionServer 发送请求。 3. HRegionServer 根据请求的操作类型,将请求转发给对应的 HRegion。 4. HRegion 读取或写入数据,并将结果返回给 HRegionServer。 5. HRegionServer 将结果返回给客户端。 具体地,对于写入数据,HBase 采用了 Write-Ahead-Log(WAL)和 MemStore机制: 1. 客户端向 HMaster 发送写入请求。 2. HMaster 获取对应表的 HRegionServer 列表,并向每个 HRegionServer 发送写入请求。 3. HRegionServer 接收到写入请求后,将数据写入 WAL。 4. 同时,HRegionServer 将数据写入内存中的 MemStore。 5. 当 MemStore 达到一定大小时,将 MemStore 中的数据写入 HDFS 中的 StoreFile。 6. HRegionServer 返回写入成功的结果。 对于读取数据,HBase 采用基于 LSM-Tree 的机制: 1. 客户端向 HMaster 发送读取请求。 2. HMaster 获取对应表的 HRegionServer 列表,并向每个 HRegionServer 发送读取请求。 3. HRegionServer 接收到读取请求后,根据请求的 RowKey,查找 MemStore 和 StoreFile 中的数据。 4. 如果在 MemStore 中找到数据,则直接返回。 5. 如果在 MemStore 中未找到数据,则在 StoreFile 中查找。 6. 如果在 StoreFile 中找到数据,则返回。 7. 如果在 StoreFile 中未找到数据,则向更高层级的 StoreFile 查找,直到找到或查找到最顶层的 StoreFile。 8. 如果在所有的 StoreFile 中都未找到数据,则返回不存在的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值