文章目录
  1. Hbase源码07_HMaster启动
  2. 1. shell启动
  3. 2. HMaster启动
    1. 2.1 RegionServer 构造方法
    2. 2.2 回到 HMaster 构造方法
    3. 2.3 回到 HRegionServer.run() 方法
  4. 3. 总结

[TOC]

Hbase源码07_HMaster启动

1. shell启动

在执行 start-hbase.sh 这里就不扯了,主要代码如下,可以进对应的脚本看下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if [ "$distMode" == 'false' ] 
then
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
# 启动内置 zk, 内部会判断 HBASE_MANAGES_ZK 的值
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
# 启动 master
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master
# 启动 region servers
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
# 启动 master backups
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi

所有的 启动类 都是在 hbase脚本 中,其中 master 对应启动的主类是 org.apache.hadoop.hbase.master.HMaster

2. HMaster启动

  • main 方法如下:
1
2
3
4
5
6
7
8
9
10
11
/**
* @see org.apache.hadoop.hbase.master.HMasterCommandLine
*/
public static void main(String [] args) {
VersionInfo.logVersion();
new HMasterCommandLine(HMaster.class).doMain(args);
}

// 判断是否是local模式, 执行 HMaster#constructMaster 进行 HMaster 的实例化。
// 调用 master.start()
// 由于 HMaster 集成 HRegionServer 类, 调用 HRegionServer#run() 方法

2.1 RegionServer 构造方法

执行 HMaster 的构造方法, 先执行 super(...), 即 RegionServer 的构造方法。

1
public HRegionServer(Configuration conf, CoordinatedStateManager csm) { ... }
  • 1、初始化各种变量,比如操作的user、消息时间间隔、重试机制的次数、操作超时时间等。
  • 2、创建 RSRpcServices 类,获取绑定的hostname

  • 3、初始化zk安全和hadoop安全相关的机制
  • 4、初始化 hbase.rootdir 的文件系统对象
  • 5、启动 RPC Server RSRpcServices.start(),内部还有一堆代码,先放放。。。
  • 6、启动 RegionServer WebUI Server
  • 7、初始化 WAL 相关的对象

2.2 回到 HMaster 构造方法

1
public HMaster(final Configuration conf, CoordinatedStateManager csm) { ... }
  • 1、初始化各种变量,比如压缩/加密方式。
  • 2、初始化 MetricsMaster JMX
  • 3、是否publish集群状态给client,默认false
  • 4、启动 master 的 Jetty WebUI
  • 5、尝试向zk中注册active的master(会校验是否已经存在有效的master节点)

2.3 回到 HRegionServer.run() 方法

  • 1、初始化zookeeper,加载meta信息等。
1
2
3
4
5
6
7
try {
// Do pre-registration initializations; zookeeper, lease threads, etc.
// 内部会初始化若干工作线程:每个的作用看看后续能不能补充
preRegistrationInitialization();
} catch (Throwable e) {
abort("Fatal exception during initialization", e);
}
  • 2、尝试向master上报集群启动响应信息
  • 3、进入while循环,进行心跳健康信息上报
  • ========== 如果出现异常,就关闭/停止若干初始化的对象(比如之前初始化的各种工作线程)。

3. 总结

到这基本HMaster的启动就基本完毕了。分析完HMaster,其实RegionServer的启动基本差不多,基本走的都是一套代码。

文章目录
  1. Hbase源码07_HMaster启动
  2. 1. shell启动
  3. 2. HMaster启动
    1. 2.1 RegionServer 构造方法
    2. 2.2 回到 HMaster 构造方法
    3. 2.3 回到 HRegionServer.run() 方法
  4. 3. 总结