HMaster -- ServerManager

HMaster -- ServerManager

1. 在HMaster的构造方法中创建.

2. 作用
a. serversToServerInfo -- ConcurrentHashMap<String, HServerInfo>(),保存RegionServer的信息,server names to server info,
b. deadServers -- Collections.synchronizedSet(new HashSet<String>()),Set of known dead servers.这些server可能只是因为网络故障引起的,服务器并没有dead.
c. serversToLoad -- ConcurrentHashMap<String, HServerLoad>() ,每个Region Server上的负载信息.
d. ServerMonitor -- 定时扫描RegionServer的状态,打印现在服务的region server的数量及deadServers信息.
e. OldLogsCleaner -- 定时清理/hbase/.oldlogs目录下的日志。
f. 对每一个加入到serversToServerInfo中的region server,都会在其对于的Zookeeper锁上(路径为/hbase/rs/1285666002331,其中1285666002331为region server启动时的时间戳,数据信息为HServerInfo.ServerAddress 的toString()--192.168.1.23:60020)注册一个ServerExpirer (implements Watcher),只监听EventType.NodeDeleted事件,处理节点因为故障使得其与Zookeeper的连接Session expired,更新完ServerManager保存的对应表后,向this.master.getRegionServerOperationQueue().put(new ProcessServerShutdown(master, info));提交请求.
g. HMaster对HRegionServer之间定期交流的信息(heartbeat)也由类的方法处理(这里以后补充)

3. 内部类及相关类
3.1 ServerMonitor extends Chore ,是一个线程服务,以daemon模式运行
定时运行(通过Sleeper.sleep(final long startTime)来挂起特定时间,具体由sleepLock.wait(waitTime);来实现,不会占用锁),时间间隔由配置 hbase.master.meta.thread.rescanfrequency 指定,默认为60秒.
只是输出平均regionLoad,及现在服务的server,和deadServer(可能是因为网络原因中断的server),这也是HMaster的log日志中每60秒输出的信息.
2010-09-30 15:12:54,508 INFO org.apache.hadoop.hbase.master.ServerManager: 4 region servers, 0 dead, average load 2.5
这里的功能是不是太简单了。

3.2 OldLogsCleaner extends Chore ,以daemon模式运行
旧的HLog的清理者,定时(频率与ServerMonitor的配置参数一样)扫描/hbase/.oldlogs目录下的文件,通过LogCleanerDelegate的boolean isLogDeletable(Path filePath)来判断文件是不是可以清除,具体的实现由"hbase.master.logcleanerplugin.impl"来定义,默认为TimeToLiveLogCleaner,具体实现为取每个HLog文件名中的最后的时间戳,与当前时间对比,如果超出了保留时间ttl("hbase.master.logcleaner.ttl", 600000),则认为可以删除
OldLogsCleaner 删除的逻辑为
条件1.目录下的文件如果名称由HLog.validateHLogFilename(String filename)判断,符合格式(".*\\.\\d*"),并且LogCleanerDelegate判断为可删除,由文件被删除.
不符合条件1的文件将全部被删除.

3.3 HServerInfo 类
/**
* HServerInfo is meta info about an {@link HRegionServer}. It is the token
* by which a master distingushes a particular regionserver from the rest.
* It holds hostname, ports, regionserver startcode, and load. Each server has
* a <code>servername</code> where servername is made up of a concatenation of
* hostname, port, and regionserver startcode. This servername is used in
* various places identifying this regionserver. Its even used as part of
* a pathname in the filesystem. As part of the initialization,
* master will pass the regionserver the address that it knows this regionserver
* by. In subsequent communications, the regionserver will pass a HServerInfo
* with the master-supplied address.
*/
HServerInfo是HRegionServer的唯一标识信息,HMaster用它来区分不同的HRegionServer,servername就是那个唯一标识,它由hostname, port, and regionserver startcode组成,中间用,分隔开.
其中a.hostname这里是/etc/hosts中设置的主机名称,例如datanode-1,这样使得如果修改hosts文件,将会使HMaster有非常大的变动,看.logs目录下的HLog文件也是以servername来创建的.
b.port端口号,默认为60020
c.startcode 为HRegionServer启动时的时间戳.
HServerInfo由HRegionServer启动时创建,并通过RPC提交给HMaster.
3.4 HRegionInfo
HRegion information.
* Contains HRegion id, start and end keys, a reference to this
* HRegions' table descriptor, etc.
New region name format:
* <tablename>,,<startkey>,<regionIdTimestamp>.<encodedName>.
* where,
* <encodedName> is a hex version of the MD5 hash of
* <tablename>,<startkey>,<regionIdTimestamp>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值