本篇博客小菌为大家带来的是HBase的Region管理与Master工作机制。
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。
Master工作机制
Master 的工作机制也分为上线和下线两种。
master 上线
前提:hbase集群中可以设置多个Hmaster,真正对外提供服务的只有一个
master启动进行以下步骤:
1.从zookeeper上获取唯一 一个代表active master的锁,用来阻止其它master成为真正的master。
2.扫描zookeeper上的/hbase/rs节点,获得当前可用的region server列表。
3.master和每个region server通信,获得当前已分配的region和region server的对应关系。
4.master扫描.META.表,计算得到当前还未分配的region,将他们放入待分配region列表。
针对master上线的几个步骤,可以高度抽象为以下几个问题。
问题一: 如何确定哪个master是真正的master 看谁获得了 active master 的锁
问题二: master如何知道有哪些regionserver 扫描zookeeper 上的/hbase/rs 节点
问题三: master 如何知道region与regionserver之间的对应关系 master 和 每个region server 通信,regionserver 之间的对应关系。
问题四: master 如何知道哪些region还未分配 master扫描.META.表,计算得到当前还未分配的region。
Hmaster下线
master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群没有影响。表的数据读写还可以正常进行。
Hmaster下线后的影响
1.无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的合并(region的split可以正常进行)。
2.当hmaster下线后,启动Zookeeper的选举机制,选出新的Hmaster,新的Hmaster上线,执行上线流程。 本次的分享就到这里就结束了,受益的小伙伴或对大数据感兴趣的朋友记得关注小菌哟(^U^)ノ~YO