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用于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值