第一篇 基于hbase2.4.2源码分析 HMaster启动分析

2024-01-25 09:58

本文主要是介绍第一篇 基于hbase2.4.2源码分析 HMaster启动分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

第一篇 基于hbase2.4.2源码分析 HMaster启动分析

  • 前言
  • 一、HMaster类继承关系
  • 二、Hmaster入口分析
    • 1.Hmaster.main()入口
    • 2.HMaster.run()
  • 总结


前言

本文不紧紧教大家看hbase源码,还介绍怎么看hbase源码

1.看什么?
看HMaster类说明
看main()入口
看初始化了哪些重要组件

如何看:看过程中画图,或者把方法的调用关系,对象的调用按照调用关系记录下来,本文按照第二种方式进行编写


一、HMaster类继承关系

class HMaster extends HRegionServer implements MasterServicesclass HRegionServer extends Thread implementsRegionServerServices, LastSequenceId, ConfigurationObserver

从性质看:
HMaster 继承HRegionServer, 实现MasterServices接口

HRegionServer 实现了Runnable接口,肯定是作为一个线程运行,核心方法在run()里面

二、Hmaster入口分析

1.Hmaster.main()入口

代码如下(示例):

  /*** @see org.apache.hadoop.hbase.master.HMasterCommandLine*/public static void main(String [] args) {VersionInfo.logVersion();new HMasterCommandLine(HMaster.class).doMain(args);}HMasterCommandLine.doMain()如下/*** Parse and run the given command line. This may exit the JVM if* a nonzero exit code is returned from <code>run()</code>.*/public void doMain(String args[]) {try {int ret = ToolRunner.run(HBaseConfiguration.create(), this, args);if (ret != 0) {System.exit(ret);}} catch (Exception e) {LOG.error("Failed to run", e);System.exit(-1);}}

发现贴源码占用篇幅很大,我改为贴核心流程哈, 下一行空一格,说明是这个方法里面的调用

HMaster.main()HMasterCommandLine(HMaster.class).doMainToolRunner.run(HBaseConfiguration.create(), this, argstool.run(toolArgs) (tool指HMasterCommandLine)HMasterCommandLine.run()做两件事1.参数检查2.startMaster() 或者stopMaster()我们在看启动流程,不要看错方向了哦startMaster进去看看,发现有两种模式的判断,我们看集群模式,不要第一次两个都看,记得自己在干什么,不要迷路了local模式集群模式		 HMaster master = HMaster.constructMaster(masterClass, conf);Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);return c.newInstance(conf);master.start(); master线程启动,run()方法开始master.join(); 通过线程的join等待结束
很明显,构造master,启动masterHMaster(Configuration)的构造器两个东西:1.super(conf); 父类初始化2.HMaster特有的东西初始化看看super(conf) 就是HRegionServer的初始化一些flush,compact间隔的配置threadWakeFrequency 10scompactionCheckFrequency 10sflushCheckFrequency 10s核心组件的初始化: rpcServices = createRpcServices() zooKeeper = new ZKWatcherMasterAddressTrackerClusterStatusTrackerputUpWebUI()
	只看到一些东西初始化,不知他们具体怎么工作,抓大放小,直接跳过。。。开始看master.start()干了什么,master是个Thread,看run方法

2.HMaster.run()

代码如下(示例):

HMaster.run() 做两件事情 1.启动jettyServer 2.启动ActiveMasterManagerint infoPort = putUpJettyServer();startActiveMasterManager(infoPort);startActiveMasterManager方法里面:进行master选举/*** Block until becoming the active master.** Method blocks until there is not another active master and our attempt* to become the new active master is successful.** This also makes sure that we are watching the master znode so will be* notified if another master dies.* @param checkInterval the interval to check if the master is stopped* @param startupStatus the monitor status to track the progress* @return True if no issue becoming active master else false if another*   master was running or if some other problem (zookeeper, stop flag has been*   set on this Master)*/if (activeMasterManager.blockUntilBecomingActiveMaster(timeout, status)) {finishActiveMasterInitialization(status);

master选举机制: 在zk的/master 目录竞争创建临时节点,创建成功就成为master
创建失败的,block住,一直等待创建成功

选举成功的会做哪些事情?

成为master的 执行finishActiveMasterInitialization() 完成active Master的初始化
这里,初始化了几十个对象。。。
不要在意他们干什么,起码不是刚看就要了解,使用到的时候,再看他们做什么


总结

master启动流程: 先进行RegionServer初始化,再HMaster初始化,HMaster竞选成为active master

这篇关于第一篇 基于hbase2.4.2源码分析 HMaster启动分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642918

相关文章

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性