HBase源码阅读-3-HRegionServer

3.HRegionServer:管理regions,并向HMaster报告自己状态       
        3.1 regionserver启动过程
            (1)读取一些配置:机器名,端口,客户端重试次数,与master交互间隔,rpc超时
            (2)创建Worker线程处理来自master的请求(????)
            (3)创建一个HBaseServer的实例提供IPC服务以处理Client的请求
            (4)创建HServerInfo实例保持regionserver信息:地址,机器名,监听端口等
            (5)创建Flush缓存的线程
            (6)创建Compact和Split region的线程
            (7)创建归档(roll)HLog的线程
            (8)定期检查regions是否需要major compaction线程
            (9)regionserver与外部client交互时,会申请一些资源,当外部client失败后需释放这些资源。创建Leases线程来处理这个任务。
            (10)创建ZooKeeper实例,以连接zookeeper集群,并增加/hbase/master节点的Watcher
            (11)申请一部分heap空间(4个byte数组,每个5M,共20M),保留下来,在发生OOME时再释放以从异常中恢复
            (12)启动regionserver并安装shut down hooks(?????????)
           
        3.2 HRegionServer.run()   
            (1)向master报告自己的状态:reportForDuty()方法
                从zookeeper的/hbase/master节点获取master地址,通过HBaseRPC获得HMasterRegionInterface接口实现的代理;
               
                从MemoryMXBean获取内存使用信息,计算其负载,并保存到HServerInfo实例中;
               
                调用HMasterRegionInterface.regionServerStartup(),告诉master该regionserver已启动,
                该接口返回一个MapWritable,包含hbase.regionserver.address,fs.default.name和hbase.rootdir等master配置信息,
                以更新本地配置(HBASE-1215);
               
            (2)启动一些服务线程   
                在文件系统根目录下.logs建立commit log HLog的实例;
                后台启动归档(roll)HLog的线程,Flush缓存的线程,Compact和Split region的线程,来自master请求的worker线程,检查regions是否需要major compaction线程
                启动Leases线程;
                启动Jetty Server,处理http请求
               
            (3)当服务线程正常运行(isAlive()),则在hbase.regionserver.msginterval间隔后与master交换信息:
                收集regionserver的metrics,包括:HStore,HStoreFile,索引,所有region的内存大小,block缓存的命中率等信息,regionserver负载信息;
                通过PRC向master发送信息HMsg,并返回master的指令,指令类型有:stop regionserver,停止服务用户regions,重启等

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