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

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57