美文网首页我爱编程
HRegionServer启动与运行

HRegionServer启动与运行

作者: 肯草 | 来源:发表于2017-04-01 21:56 被阅读594次

      这次来解析一下HBase1.0.0中,RegionServer的启动过程。

一:启动shell脚本

      首先从启动RegionServer的shell命令开始看起吧,通常都是通过hbase-daemon.sh start regionserver命令来启动RegionServer的。在windows下用notepad++打开对应的shell脚本,可以看到start参数对应如下脚本:

hbase-daemon.sh代码片段

      相当于就是再次调用hbase-daemon.sh internal_start,对应的shell脚本片段如下:

hbase-daemon.sh代码片段

      定位到最后的hbase命令对应的shell脚本可以看到如下代码:

hbase脚本代码片段 hbase脚本代码片段

找了这么久,总算是定位到RegionServer就是在运行org.apache.hadoop.hbase.regionserver.HRegionServer这个java类了。

二:HRegionServer的启动

      打开eclipse,用maven导入源代码,直接翻到main函数,代码如下

HRegionServer的main函数

      这里HRegionServerCommandLine的doMain方法以后讲hmaster的时候在细讲,主要作用就是接受命令行传来的参数,构造一个HRegionServer实例,然后在开启对应线程执行HRegionServer的线程主体。

      其中HRegionServer的函数定义为:

HRegionServer的构造函数

      conf对应着配置文件,csm是一个协调服务,提供启停Server等方法,由HRegionServerCommandLine根据配置文件确定具体的实现类。

      HRegionServer的构造函数实在过于冗长,下面只是讲讲大概做了什么,具体的代码就不贴上来了:

1.根据配置文件初始化regionserver的userProvider对象,用于权限认证;

2.根据配置文件初始化regionserver的nonceManager对象,用于防止类似于网页开发中的重复提交,可以参考这篇文章(http://blog.csdn.net/lipeng_bigdata/article/details/50464441),默认情况下是开启的;

3.根绝配置文件,创建RegionServer的RPC服务端;

4.根据系统时间,生成serverName(这里贴一下代码,因为web管理页面的服务器名称就是根据这个弄来的,代码很简单,就不细讲了)

regionserver生成自己的serverName

5.启动RPC服务,这里的RPC与hadoop RPC类似,有listener responser scheduler 也有相关队列;

6.启动动态的RegionServer配置服务,在1.0的版本中,部分参数的修改不需要通过重启生效;

7.初始化在zookeeper上面的信息;

8.构造walRoller对象,这个等下详细讲。

三:关于walRoller

      HRegionServer与walRoller的类图大概如下面所示: 

HRegionServer与LogRoller的类图

      这里其实最想表达的疑惑为什么不干脆把LogRoller的构造函数,弄成形如LogRoller(hrs:HRegionServer)的样子。虽然面向对象的思想告诉我们,软件设计应该遵循抽象与多态的原则,巧妙地运用接口,但是按照这种思想这里调用的时候却传入了两个一模一样的参数,个人感觉还是不太对,也许以后能够了解吧。

四:RegionServer的运行

      在run方法中,首先初始化zookeeper,然后开启检测线程,检测RegionServer是不是挂了;接着,为coprocessor配置运行环境(考虑到coprocessor可能会需要zk,所以先初始化zookeeper);然后就开始向master注册自己;最后的线程主体中,只要集群还监控运行就会汇报自己的信息,直到集群停止,再根据配置回收一系列资源。

相关文章

网友评论

    本文标题:HRegionServer启动与运行

    本文链接:https://www.haomeiwen.com/subject/mckwottx.html