设为首页 加入收藏

TOP

HBase1.0.0版源码分析之HMaster启动代码分析(2)(一)
2015-07-24 11:10:45 来源: 作者: 【 】 浏览:1
Tags:HBase1.0.0 源码 分析 HMaster 启动 代码

在上一片博客中我的代码分析是到startMaster这个核心的启动函数,本文主要分析具体的HMaster构造过程中所涉及的相应组件以及服务的启动,这篇文章也主要是从流程上进行分析,具体的每个部分的启动过程稍后的文章将会详细分析,主要包括的几个核心过程有:RPC服务的创建,zookeeper集群管理类的初始化,各种工作线程的启动等

在介绍的开始,有必要了解一下HMaster的继承体系,如下图:
\

接下来具体的进行启动流程的分析:
1.启动代码

logProcessInfo(getConf());//将系统的运行配置参数以及JVM的状态存到日志中
CoordinatedStateManager csm =
        CoordinatedStateManagerFactory.getCoordinatedStateManager(conf);
HMaster master = HMaster.constructMaster(masterClass, conf, csm);
2.csm对象的构造,该函数中conf.getClass的函数意义比较蛋疼,此处代码表示的意思是我们需要获取一个协同状态管理类,三个参数分别表示:1.自定义的类的名字(用于获取相应的class文件),2.表示默认的HBase的协同管理类ZKCoordinatedStateManager,3.用于验证所获取的class是不是从CoordinatedManager继承的.默认的class是通过zookeeper实现CoordinatedManager对HBase的集群进行管理
然后通过反射机制形成类的实例
public static CoordinatedStateManager getCoordinatedStateManager(Configuration conf) {
  Class coordinatedStateMgrKlass =
    conf.getClass(HConstants.HBASE_COORDINATED_STATE_MANAGER_CLASS,
      ZkCoordinatedStateManager.class, CoordinatedStateManager.class);
  return ReflectionUtils.newInstance(coordinatedStateMgrKlass, conf);
}
3.接下来就是具体的HMaster的对象的构造过程,
/**
 * Utility for constructing an instance of the passed HMaster class.
 * @param masterClass
 * @param conf
 * @return HMaster instance.
 */
public static HMaster constructMaster(Class masterClass,
    final Configuration conf, final CoordinatedStateManager cp)  {
  try {
    Constructor c =
      masterClass.getConstructor(Configuration.class, CoordinatedStateManager.class);
    return c.newInstance(conf, cp);
  }
这里使用Configuration和CoordinatedStateManager为参数的构造函数进行构造,但是这里为什么需要使用反射??是为了更好的通过传入类型信息增加程序的可拓展性吗,可是如果增加可扩展性的化还是需要修改调用之处的源代码啊?

?

接下来我们再来看看这个构造函数:
先调用父类的构造函数:(photo here for related class diagram)
super(conf, csm);
进行各种参数变量的赋值操作,这里有几个关键的步骤
(1)创建RPC的服务

rpcServices = createRpcServices();
(2)连接Zookeeper集群
// Open connection to zookeeper and set primary watcher
zooKeeper = new ZooKeeperWatcher(conf, getProcessName() + ":" +
        rpcServices.isa.getPort(), this, canCreateBaseZNode());
(3)创建文件系统操作实例
this.fs = new HFileSystem(this.conf, useHBaseChecksum);
(4)初始化CoordinatedStateManager对象
this.csm = (BaseCoordinatedStateManager) csm;
this.csm.initialize(this);
this.csm.start();

?

 (5)创建各种集群跟踪和管理对象
 
masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);
masterAddressTracker.start();

clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);
clusterStatusTracker.start();

this.configurationManager = new ConfigurationManager();

最后启动rpc的服务and ui:
rpcServices.start();
putUpWebUI()
至此,父类HRegion的实例化过程结束,转入到HMaster拓展部分的实例化
HMaster的实例化部分比较复杂,这里也就几个关键的步骤进行分析

(1)激活一个工作HMaster
activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);

//注册相应的集群观察者
ActiveMasterManager(ZooKeeperWatcher watcher, ServerName sn, Server master) {
  super(watcher);
  watcher.registerListener(this);
  this.sn = sn;
  this.master = master;
}

(2)启动Jetty服务

?

?

int infoPort = putUpJettyServer();
2015-03-23 13:40:49,143 INFO [main] http.HttpRequestLog: Http request log for http.requests.master is not defined
2015-03-23 13:40:49,366 INFO [main] http.HttpServer: Added global filter 'safety' (class=org.apache.hadoop.hbase.http.HttpServer$Quoti
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇EntityFramework实体框架的形成之.. 下一篇数学之路-sas备忘(9)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)