HBase 0.99 源代码分析 - Master启动过程(2)

来源:互联网 发布:mac上卸载程序 编辑:程序博客网 时间:2024/06/05 02:32

下面继续从HMaster.finishActiveMasterInitialization方法开始分析HBase 0.99 Master启动过程。HMaster.finishActiveMasterInitialization方法主要完成如下功能:

1. 初始化Master功能组件:file system manager, server manager, assignment manager, region server tracker 等。

2. 启动服务线程:balancer,catalog janitor, executor services 等。

3. 在ZooKeeper中设置集群状态为UP

4. 等待Region server登录

5. 如果需要的话,拆分Log, 执行数据恢复

6. 分配meta, namespace和region

7. 处理集群启动或master failover

8. 调用coprocessor

HMaster.finishActiveMasterInitialization方法源代码比较长,下面我们逐步进行分析。

上面代码执行了如下功能:

1. 设置本Master的isActiveMaster标志为true

2. 设置masterActiveTime为当前系统时间

3. 初始化filesystem manager类MasterFileSystem,该类包装了Master与底层文件系统交互时的一些操作,例如Log分割,检查文件系统状态等。初始化时读取配置并设置HBase跟路径,临时路径等,并初始化SplitLogManager

4. 向ZooKeeper设置cluster ID.

5. 创建server manager, server manager管理所有Region server, 包括在线和死亡的Region server, 处理Region server的启动,关闭和死亡

6. 创建到自身Regionserver的HConnection连接,存储到成员变量shortCircuitConnection中,可通过该连接绕过RPC, 执行HConnection客户端请求。

7. 初始化metaTableLocator对象, 该对象用于定位meta 表hbase:meta

8. 释放所有tablewrite lock

9. 初始化tablestate manager对象,该对象用于管理表的状态

10. 初始化所有基于ZooKeeper的system tracker, 包括:

  1). load balancer:默认实现类为 StochasticLoadBalancer, load balancer负责管理region 在regionserver之间的迁移方案。可以通过配置项hbase.master.loadbalancer.class更改实现类。对于默认实现类StochasticLoadBalancer,可以通过如下配置项控制其行为:

    hbase.master.balancer.stochastic.regionLoadCost

    hbase.master.balancer.stochastic.moveCost

    hbase.master.balancer.stochastic.tableLoadCost

    hbase.master.balancer.stochastic.localityCost

    hbase.master.balancer.stochastic.memstoreSizeCost

    hbase.master.balancer.stochastic.storefileSizeCost    

    hbase.master.balancer.stochastic.maxMoveRegions

    hbase.master.balancer.stochastic.stepsPerRegion

    hbase.master.balancer.stochastic.maxSteps

  2). load balancertracker: 基于ZooKeeper跟踪load balancer状态。

  3). assignmentmanager:负责region的分配。

  4). region servertracker: 通过ZooKeeper跟踪在线的region server

  5). draining server tracker:通过ZooKeeper管理drainingregion server。 在大型集群中, 用户有时需要把一部分region server服务器一起停止服务迁出HBase集群,这些将要被迁出的region server称为draining region server。被迁走的region server上的region需要被分配到其他region server上,为避免把一个draining server上的region迁到另一个draining server上,hbase会一次把所有draining server加入draining server列表。

  6). snapshot manager:负责管理 HBase快照功能,包括创建快照,恢复快照。快照是HBase从0.94.6开始提供的功能,创建快照时并不复制数据,因此速度很快,对region server性能基本没有影响。

11. 初始化master协处理器(coprocessor) MasterCoprocessorHost,负责管理所有master相关操作的协处理器。

继续看finishActiveMasterInitialization接下来的代码

上面代码执行如下功能:

1. 调用startServiceThreads方法,该方法首先按下表中的个数启动如下服务线程:

服务线程类型

配置项

默认线程个数

MASTER_OPEN_REGION

hbase.master.executor.openregion.threads

5

MASTER_CLOSE_REGION

hbase.master.executor.closeregion.threads

5

MASTER_SERVER_OPERATIONS

hbase.master.executor.serverops.threads

5

MASTER_META_SERVER_OPERATIONS

hbase.master.executor.serverops.threads

5

M_LOG_REPLAY_OPS

hbase.master.executor.logreplayops.threads

10

MASTER_TABLE_OPERATIONS

不可配置

1

 

然后读取配置项hbase.master.cleaner.interval作为log cleaner时间间隔,默认为1分钟,启动log cleaner线程,该线程每到一个时间间隔清理oldWALs目录下旧的HLog.

然后启动HFile archive清理线程,清理archive目录下的HFile archive.

置服务线程启动标志serviceStarted为true.

2. 唤醒当前server允许check in.

3. 等待region server check in. 满足如下条件之一则等待完毕:

   - master 停止

   -达到配置项hbase.master.wait.on.regionservers.maxtostart指定的region server个数

   -达到配置项hbase.master.wait.on.regionservers.mintostart指定的region server个数并且  在配置项hbase.master.wait.on.regionservers.interval指定的间隔内没有新的region server并且达到配置项hbase.master.wait.on.regionservers.timeout超时时间

4. 获取在线region server列表并进行注册。

继续看finishActiveMasterInitialization:

getFailedServersFromLogFolders方法找出之前正在recovering但已down掉,却在WALs目录下仍然遗留log的server

removeStaleRecoveringRegionsFromZK从ZooKeerper删除/hbase/recovering-regions/下的不在线的节点,即上面找出的server. 此处并不是删除log, 而是删除ZooKeeper中down掉的server信息,后面会对每个region重新分配region server

如果meta表被分配给down掉的server,先分离meta log

从ZooKeeper获取之前down掉的meta server,合并down掉的meta server和region server列表。

等待region server初始化完成。

初始化load balancer。

分配meta region到region server。

processDeadServer会调用ServerShutdownHandler类进行日志分离。

调用assignment manager进行用户region 分配。

启动namespace manager和quota manager。

最后调用master启动完成协处理器。

至此master启动完成。

0 0
原创粉丝点击