第一篇 基于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

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne