HMaster启动流程

HMaster UML类图

HMaster启动流程

在HMaster类的构造函数中会实例化ActiveMasterManager类,同时启动HBase的web console。

    // Some unit tests don't need a cluster, so no zookeeper at all
    if (!conf.getBoolean("hbase.testing.nocluster", false)) {
      activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);
      //启动web页面
      int infoPort = putUpJettyServer();
      //
      startActiveMasterManager(infoPort);
    } else {
      activeMasterManager = null;
    }

@see startActiveMasterManager 方法,核心方法:

 1)首先写入ZK,把本节点作为backup master节点,后续称为active master的时候,就删除ZK中,本节点作为backup master的纪录。

 2)一直在while里面循环,直到成为active master.

 3) 当成为active master的时候,调用finishActiveMasterInitilization()启动一系列组件。

      MasterFileSystem类。

      MasterWalManager类。

      ServerManager类。管理Region Server。

      TableStateManager类。管理管理表状态。

      initializeZKBasedSystemTrackers()方法,初始化所有基于ZK的tracker

      MasterCoprocessortHost类。为master提供协处理框架和环境。

      调用startProcedureExecutor()方法。将服务停止前的wal数据再读出来,以及其他的数据清洗工作。

      等待Region Server接入HMaster。不达到指定数目的Region Server连入,就一直阻塞。

      启动MasterMetaBootstrap类。用于切分meta日志和分配meta表。

      启动FavoredNodesManager类。

      等待Region Server完成初始化。

      初始化LoadBalancer。

      分配 meta region。

      更新ZK中表状态。

      分配meta副本

      MaterQuotaManger类。负责初始化quota表在初次运行,并且提供admin接口操作quota表