HBase1.0.0版源码分析之HMaster启动代码分析(1)

本文其实还算不上真正的启动代码解析,本文主要还是从启动流程上分析到startHMaster部分,初次之外本文将就HBase的伪分布式调试方式进行相关的介绍.

我们将源码倒入到Intellij IDE之后会得到如下的代码结构:

这里我们进入hbase-server中在src/main下面的resources中添加hadoop-metrics2-hbase.properties,hbase-site.xml,log4j.properties等文件并进行相应的配置,除了hbase-site.xml文件之外的其他文件都可以直接从conf目录下拷贝过来,我的hbase-site.xml简单配置如下FYI:

<property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:9000/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/opt/zookeeper/data</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
    </property>

    <property>
        <name>hbase.defaults.for.version.skip</name>
        <value>true</value>
    </property>

这样配置完毕之后,就可以启动HMaster和HRegionServer进行代码的调试工作了.源码的配置调试前期工工作就介绍到此.

在介绍HMaster的启动流程之前,我们首先来看一下涉及到流程启动的关键类之间的依赖关系,具体如下图所示:

1.HMaster中有个main方法,这是HMaster启动的开始的地方,如下所示:

  public static void main(String [] args) {
    VersionInfo.logVersion();
    //System.out.println("########################################HMaster started!");
    new HMasterCommandLine(HMaster.class).doMain(args);
    //System.out.println("HMaster stoped!");
  }

从代码中可以看出,这里需要传入启动需要的参数,具体参数的用法如下:

[opts] start|stop|clear

start:启动Master,如果是本地模式,则在同一个JVM上启动Mater和RegionServer

stop: 开始关闭集群,Master向RegionServer发送shutdown信号

clear:在master崩溃之后删除Zookeeper中的节点

[opts]: --minRegionServers=<servers> 最少能够容纳用户表的RegionServers数目,

--localRegionServers=<servers>在本地模式下,master进程中启动的Regionsrevers数目

--masters=<servers> 进程中master的数量

--backup 备份模式启动

2.接下来我们来看看HMasterCommandLine的doMain方法所进行的工作,如下:

  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);
    }
  }
  public static int run(Configuration conf, Tool tool, String[] args)
    throws Exception{
    if(conf == null) {
      conf = new Configuration();
    }
    GenericOptionsParser parser = new GenericOptionsParser(conf, args);
    //set the configuration back, so that Tool can configure itself
    tool.setConf(conf);

    //get the args w/o generic hadoop args
    String[] toolArgs = parser.getRemainingArgs();
    return tool.run(toolArgs);
  }

CommandLIne方法调用了ToolRunner的run方法,继而该方法进行了一些命令参数的解析并调用HMaserCommandline所实现的run方法,该方法主要做一些参数的配置与解析,并就命令传入的参数调用不同的处理方法,如下所示:

        String command = remainingArgs.get(0);

        if ("start".equals(command)) {
            return startMaster();
        } else if ("stop".equals(command)) {
            return stopMaster();
        } else if ("clear".equals(command)) {
            return (ZNodeClearer.clear(getConf()) ? 0 : 1);
        } else {
            usage("Invalid command: " + command);
            return 1;
        }

到此为止我们就可以看到相应具体的Master启动调用,startMaster启动代码比较复杂,我将会在下一篇文章中进行具体的介绍.

时间: 2024-10-13 05:39:05

HBase1.0.0版源码分析之HMaster启动代码分析(1)的相关文章

qemu-kvm-1.1.0源码中关于迁移的代码分析

Description Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by dialing the memorable TUT-GLOP. Some

Android7.0 Phone应用源码分析(三) phone拒接流程分析

接上篇博文:Android7.0 Phone应用源码分析(二) phone来电流程分析 今天我们再来分析下Android7.0 的phone的拒接流程 下面先来看一下拒接电话流程时序图 步骤1:滑动按钮到拒接图标,会调用到AnswerFragment的onDecline方法 com.android.incallui.AnswerFragment public void onDecline(Context context) { getPresenter().onDecline(context);

Android7.0 Phone应用源码分析(二) phone来电流程分析

接上篇博文:Android7.0 Phone应用源码分析(一) phone拨号流程分析 今天我们再来分析下Android7.0 的phone的来电流程 1.1TelephonyFramework 当有来电通知时,首先接收到消息的是Modem层,然后Medoem再上传给RIL层,RIL进程通过sokcet将消息发送给RILJ(framework层的RIL),同样进入RILJ的processResponse方法,根据上一章节去电流程的分析得知,来电属于UnSolicited消息,事件ID是 RIL_

.NET Core 3.0之深入源码理解Configuration(一)

原文:.NET Core 3.0之深入源码理解Configuration(一) Configuration总体介绍 微软在.NET Core里设计出了全新的配置体系,并以非常灵活.可扩展的方式实现.从其源码来看,其运行机制大致是,根据其Source,创建一个Builder实例,并会向其添加Provider,在我们使用配置信息的时候,会从内存中获取相应的Provider实例. .NET Core采用了统一的调用方式来加载不同类型的配置信息,并通过统一的抽象接口IConfigurationSourc

Android # 4.0.x(1-3) 源码 下载 编译

Android 4.0源码下载方法:repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 官方下载页面:http://source.android.com/source/downloading.html Android SDK 4.0官方下载页面:http://developer.android.com/sdk/android-4.0.html android 4.0.3最新源码下载

eclipse 编译tomcat8.0.26的源码

第一次写东西, 如果有不对的地方,请大神指正,我会尽快修正…… 参考:http://www.cnblogs.com/lanxuezaipiao/p/3640923.html 1.从tomcat官网(http://tomcat.apache.org/)下载 源码 apache-tomcat-8.0.26-src.zip . 2.下载项目构建工具 ant (http://ant.apache.org/).解压后, 配置环境变量,并修改path值. 例如,ANT_HOME="D:\Program Fi

jsoncpp-src-0.5.0.tar.gz 源码错误!!!!

近期在做毕设,使用到了JsonCpp0.5.0版本号的源码! 依照网上的安装配置教程,搭建好环境后就能够使用了! 在这里就不浪费空间去将怎样搭建开发环境了!请大家去google一下就好了! 在解析一个Json文件时.程序总是在某个地方出错! 開始还以为是TXT文件的格式不正确,还特意找了一个json文件来搞!这时发下这个json文件却执行通过! 难道真的是文件的问题!我将我的TXT文件逐渐简化,可是还是出问题,而其问题不是出在我的代码中.难道是JsonCpp的源码出现了问题!真的不敢相信!! 我

.NET Core 3.0之深入源码理解Startup的注册及运行

原文:.NET Core 3.0之深入源码理解Startup的注册及运行 写在前面 开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点.通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可以减少.NET应用程序对单一服务器的依赖性,使我们在更大程度上专注于面向多服务器为中心的开发模式. 目录: Startup讨论 Starup所承担的角色 Startup编写规范 ConfigureServices C

.NET Core 3.0之深入源码理解Configuration(二)

原文:.NET Core 3.0之深入源码理解Configuration(二) 文件型配置基本内容 上一篇文章讨论了Configuration的几个核心对象,本文继续讨论Configuration中关于文件型配置的相关内容.相比较而言,文件型配置的使用场景更加广泛,用户自定义配置扩展也可以基于文件型配置进行扩展.如果需要查看上一篇文章,可以点击移步. .NET Core文件型配置中我们提供了三种主要的实现,分别是JSON.XML.INI,请查看下图 由图可知,这三种配置的实现方式是一样的,当然了