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

相关文章

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

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

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

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

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit