HBase源码阅读-2-HMaster

2.HMaster:实现master的功能
A.负责分配region到regionserver,检测新增或失败的regionserver,与regionserver交互,regionserver间的负载均衡等;
B.处理shcema的变更;
C.实现ZooKeeper的Watcher接口,与zookeeper集群交互

        2.1 master启动过程初始化,构造HMaster实例
            --minServers=:指定最少的RegionServers数,默认为13,(RegionServer机器不够13如何??)
            根据参数hbase.cluster.distributed分local和distribute模式,这里主要考虑distribute模式下:
                (1)设置并检查文件系统路径。(checkRootDir方法)
                    a.如果文件系统处于安全模型,则一直等待直到退出安全模式
                    b.若root路径不存在则会创建该目录,并将当前hbase的文件格式版本号写入hbase.version中,并再下一次启动是会检查
                是否与当前hbase版本支持的文件格式版本一致。
                    c.检查root Region是否存在,即-ROOT-目录是否存在(root region也是当做一个table来统一处理的)。
                不存在,则创建root region和第1个meta region。       
                    root region:regionId=0,tableName=-ROOT-,仅有一个info的Column Family
                    meta region:regionId=1,tableName=.META.,有一个info和historian两个Column Family
                    d.将meta做为root region的user region加入其中(有点拗口)。
                   
                (2)获取master的地址,并创建一个HBaseServer的实例提供RPC服务   
               
                (3)创建一个连接???(HMaster也作为集群的一个客户端,完成schema的变更等功能)
               
                (4)读取classpath下配置的hbase.zookeeper.property.clientPort和hbase.zookeeper.quorum,连接zookeeper集群:创建ZooKeeper实例,并增加Watcher(HMaster)
                    设置/hbase,/hbase/root-region-server,/hbase/rs,/hbase/master,/hbase/master/shutdown等hbase存储在zookeeper中信息的路径
                    将master地址写入/hbase/master(若该Znode存在,则等待直到该节点被删除。谁来删???)
                   
                   
                (5)建立RegionServerOperation队列
               
                (6)启动ServerManager管理region servers的信息
               
                (7)启动RegionManager分配region到region servers,并管理root,meta等状态
               
            2.2 master执行过程,启动线程,执行Thread.run()       
                (1)将master加入集群:
                    从zookeeper的hbase/root-region-server读取root region所在的regionserver;
                    读取所有regionserver地址,若没有regionserver则可能是一个新启动的集群,调用HLog.splitLog(this.rootdir, logDir, oldLogDir, this.fs, getConfiguration())(还没看明白???);
                   
                (2)启动服务线程:
                    启动RegionManager的root和meta region的扫描线程
                        初始扫描后,应知道所有region的分配信息;而region每次分裂后也应通知master,并分配region给新的regionserver;
                        但master可能丢失该split信息,因此周期性的扫描root和meta region以检测丢失的split信息及regionserver的死亡信息
                    启动一个Jetty Server,处理http请求
                    启动RPC服务

你可能感兴趣的:(C++,c,C#,配置管理,hbase)