HBase的master server具体实现是HMaster。它提供了面向Client的HMasterInterface和面向region server的HMasterRegionInterface的实现。
下面是它的组件介绍:
InfoServer
展示信息的组件。这是一个web server,响应你访问http://MasterHost:60010的http请求,它本质是一个Jetty web server。
ZooKeeperWatcher
zookeeper的观察者。所有需要获知与处理ZNode状态变化的组件都需要在它上面注册ZooKeeperListener。同时它还提供了在zookeeper上操作节点的能力,通过获取其内部的RecoverableZooKeeper对象来进行操作。
ActiveMasterManager
active master的管理对象。它主要做的事就是监听zookeeper上master znode的变化。一旦它发现当前的active master unavailable(也就是 master znode被删除了),那么它会竞争,使当前master成为新的active master。
在master启动的时候会调用其blockUntilBecomingActiveMaster方法,试图成为集群的active master。失败的话,master的启动会阻塞在这个方法上,直到集群停止或者是当前active master unavailable,那么它会被唤醒做新的竞争。
RegionServerTracker
跟踪online region server的状态通过zookeeper,并做相应处理。如果某个RS znode被删除了,那么它会通过ServerManager去终止这个RS,并移出online servers列表。
特别的,在它准备expire这个RS的时候,会先通过ServerManager判断这个RS是否在线,如果不在线则不做exprire,也不移出列表,仅仅是打出一条warn log。我猜这样做的目的是:既然RS不在线,我也无法给它下达关闭命令,说不定过一会这个RS恢复正常又上线了,又重新在zookeeper里建立znode。