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:
   * &lt;tablename>,,&lt;startkey>,&lt;regionIdTimestamp>.&lt;encodedName>.
   * where,
   * &lt;encodedName> is a hex version of the MD5 hash of
   * &lt;tablename>,&lt;startkey>,&lt;regionIdTimestamp>

你可能感兴趣的:(apache,hadoop,REST,hbase,UP)