`
run_xiao
  • 浏览: 195396 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

HBase源码阅读-4-HMaster与HRegionServer的RPC

阅读更多

4.HMaster与HRegionServer的RPC
            启动master时创建一个Server的实例,利用反射机制提供HMaster的方法调用服务;Server继承自抽象类HBaseServer;
            HBaseServer通过异步io(nio包)提供了非阻塞的网络连接
            4.1 RPC Server的创建及启动过程
                (1)HBaseServer初始化参数:绑定地址,端口,调用队列大小,最大连接数,最大闲置连接数等    
                
                (2)创建Listener(继承自Thread)实例,使用ServerSocketChannel绑定到监听端口,并向Selector注册接受新连接事件
                    对新连接连接,因为采用异步方式处理,所以为新连接创建一个Connection的实例维持连接状态,并在Selector注册相应的读事件,以读取请求;
                    对读事件,获取对应的Connection对象,由readAndProcess方法读取并处理请求;
                    处理请求时,创建Call对象,包含连接和RPC调用的具体参数信息,放入一个队列中,等待处理;     
                    (一个连接Connection可能有多个Call???)
                    
                (3)创建10个Handler线程,互斥的从Call队列中取出Call的实例,传入参数调用call方法进行RPC调用(该方法由Server实现);
                将处理完成的结果放入Call对应Connection的回复队列中,并向Selector注册写回复请求
                
                (4)创建Responder实例线程;
                该线程获取写回复请求,执行异步写,一次性回复一个Connection的所有Call调用结果
                
            4.2 HRegionServer访问master的RPC:在启动regionservre时,采用代理模式创建了接口HMasterRegionInterface的一个本地代理,在调用
            接口方法时,委托给Invoker对象的invoke方法,该方法又通过HBaseClient作为客户端向HBaseServer发送请求,并获取返回结果
            
            4.3 HMaster与HRegionServer交互信息的格式
                (1)HServerInfo:包括服务器地址,端口,主机名,regionserver的负载信息HServerLoad
                (2)HRegionInfo:包括region id,起、止Key,region包含的table信息,是否在线,regionName等
                (3)HMsg:HMaster和HRegionServer通信的指令
                    master发送给region server的指令包括:启动指定region;停止指定region;分裂region;compact region;停止regionserver;停止指定region而无需回复;停止所有用户region
                    从region server到master的指令:regionserver正在服务指定region;regionserver已不再服务指定region;regionserver正在关闭;已停用所有用户region;Flush缓存;运行Major Compaction;分裂指定region
                
            4.4 交互协议
                HRegionServer启动时:
                (1)HRegionServer获取服务端协议版本并比较
                (2)HRegionServer调用HMasterRegionInterface的regionServerStartup接口,报告该regionserver已启动;
                    HMaster将regionserver的管理都交给ServerManager;
                    HMaster返回hbase.regionserver.address,fs.default.name和hbase.rootdir等配置信息         
                (3)然后定期(hbase.regionserver.msginterval)定期调用HMasterRegionInterface的regionServerReport接口报告regionserver的状态,并接受指令
                
            4.5 master对regionserver的管理:ServerManager
                ServerManager维护三个Map记录可用regionserver状况,
                    serversToServerInfo:从serverName到其HServerInfo的映射;
                    serversToLoad:从serverName到其最近HServerLoad的映射;
                    loadToServers:从HServerLoad到其serverName集合的映射(相同负载的regionserver);
                    一个Set    deadServers维护已死亡的regionserver信息;
                    
                (1)regionserver启动后向master报告:
                    a.ServerManager的regionServerStartup方法先检查是否已存在相同的regionserver,若存在且通过startCode判断其是否stale(???),若stale则终止该regionserver:
                            删除该regionserver对应的HServerInfo、HServerLoad,加入到deadServers队列,并向master的RegionServerOperation队列中增加一个关闭该server操作,等待处理
                    b.检查该regionserver是否在deadServers队列
                    c.然后在zookeeper的/hbase/rs/增加Znode中记录新的regionserver,并向该Znode增加一个ServerExpirer,在该节点被删除后expire该regionserver
                    d.serversToServerInfo,serversToLoad,loadToServers增加相应记录
                (2)处理regionserver的heart beat报告(这一部分逻辑比较复杂)
                    a.检查该regionserver是否已经dead(与deadServers中的记录进行比较)
                    b.第一条HMsg是:regionserver正在关闭
                            从serversToServerInfo中删除该regionserver;
                            调用RegionManager,使该regionserver上的所有meta和root region下线;
                            检查是否有root和meta region正在该server启动,有则重新分配该region ;
                            从serversToLoad和loadToServers从删除该regionserver的load信息;
                            然后依次读取后面每条msg,msg类型必需为:停止region;通过master的RegionManager来管理region
                            最后向regionserver返回空的HMsg.
                    c.第一条HMsg是:MSG_REPORT_QUIESCED,即regionserver关闭所有user regions,则quiescedServers记录该状态regionserver的数据
                        当master接受到shutdown请求时,而所有regionserver仅服务metar regions则关闭master
                    d.若master已关闭,则返回REGIONSERVER_STOP的msg
                    e.若serversToServerInfo中查不到该regionserver,也向regionserver发送REGIONSERVER_STOP的msg
                    f.前面处理掉所有异常情况,然后调用processRegionServerAllsWell处理regionserver的HMsg:
                            更新serversToServerInfo,serversToLoad,loadToServers中regionserver对应的信息;
                            依次处理每条HMsg:
                                regionserver正在处理open指定region的请求:累加该指令次数
                                regionserver已open指定region:
                                    若region被重复打开了,则回复regionsever关闭
                                    若是root region,则从未分配region列表中删除,并记录root region所在regionserver地址;
                                    非root region,设置状态为open,向RegionServerOperationQueue添加ProcessRegionOpen操作,
                                    连接至该region的meta region所在regionserver,该regionserver客户端获得HRegionInterface的代理,put该region的信息到meta region中(key为region名,CATALOG_FAMILY下有主机和端口、startCode两列)
                                    若region是meta region,则加入RegionManager中的扫描队列中。
                                regionserver已关闭指定region:    
                                    如果是root region则清理RegionManager中root
                                    向master的RegionServerOperationQueue中增加ProcessRegionClose操作
                                MSG_REPORT_SPLIT,MSG_REPORT_SPLIT_INCLUDES_DAUGHTERS,regionserver分裂region操作:都委托给RegionManager
                                
                (3)ServerMonitor线程,定期dump deadServers和regionserver数量及每个regionserver的平均服务region数量
                
                
            4.6 regionserver处理master返回的HMsg:regionserver将master返回的消息放入一队列中,由其worker线程从队列中依次取出并处理
                (1)处理MSG_REGIONSERVER_QUIESCE,关闭所有user region:从HRegionServer记录的所有online regions中选出所有user region,每个region启动一个线程进行执行关闭
                (2)MSG_REGION_OPEN,打开指定region:若整个集群的root region还没打开,则不处理该指令,并重新放回队列中;                    
                (3)MSG_REGION_CLOSE,关闭指定region:从online regions中选出要关闭的region,关闭该region,并给master回复已关闭的信息
                (4)MSG_REGION_SPLIT,分裂指定region:先flush缓存数据;设置region的标识变量splitRequest为true;region放入CompactSplitThread线程的compactionQueue队列中等待分裂
                (5)MSG_REGION_MAJOR_COMPACT和MSG_REGION_COMPACT:region放入CompactSplitThread线程的compactionQueue队列中等待Compaction
                (6)MSG_REGION_FLUSH:flush指定region

2
0
分享到:
评论

相关推荐

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    hbase的hbase-1.2.0-cdh5.14.2.tar.gz资源包

    `hbase-1.2.0-cdh5.14.2.tar.gz` 是针对Cloudera Distribution Including Apache Hadoop (CDH) 5.14.2的一个特定版本的HBase打包文件。CDH是一个流行的Hadoop发行版,包含了多个大数据组件,如HDFS、MapReduce、YARN...

    hbase-1.2.1-bin.tar.gz.zip

    此外,为了运行HBase服务,还需要启动HMaster和HRegionServer进程。 总之,HBase-1.2.1的二进制压缩包提供了在Hadoop环境下部署和运行HBase所需的所有组件,适用于处理大量非结构化或半结构化数据的场景,如实时...

    phoenix-hbase-2.4-5.1.2

    《Phoenix与HBase的深度解析:基于phoenix-hbase-2.4-5.1.2版本》 在大数据处理领域,Apache HBase和Phoenix是两个至关重要的组件。HBase作为一个分布式、列式存储的NoSQL数据库,为海量数据提供了高效、实时的访问...

    flink-hbase-2.11-1.10.0-API文档-中文版.zip

    赠送jar包:flink-hbase_2.11-1.10.0.jar; 赠送原API文档:flink-hbase_2.11-1.10.0-javadoc.jar; 赠送源代码:flink-hbase_2.11-1.10.0-sources.jar; 赠送Maven依赖信息文件:flink-hbase_2.11-1.10.0.pom; ...

    phoenix-hbase-2.2-5.1.2-bin.tar.gz

    `phoenix-hbase-2.2-5.1.2-bin.tar.gz`这个压缩包包含了Phoenix 2.2版本与HBase 5.1.2版本的二进制文件,用户可以解压后在本地或集群环境中安装和运行。安装步骤通常包括配置环境变量、创建HBase和Phoenix的目录结构...

    hbase-hadoop-compat-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    hbase-prefix-tree-1.1.3-API文档-中文版.zip

    赠送jar包:hbase-prefix-tree-1.1.3.jar; 赠送原API文档:hbase-prefix-tree-1.1.3-javadoc.jar; 赠送源代码:hbase-prefix-tree-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-prefix-tree-1.1.3.pom; ...

    phoenix-hbase-1.4-4.16.1-bin

    《Phoenix与HBase的深度解析:基于phoenix-hbase-1.4-4.16.1-bin的探讨》 Phoenix是一种开源的SQL层,它为Apache HBase提供了高性能的关系型数据库查询能力。在大数据领域,HBase因其分布式、列式存储的特性,常被...

    hbase-metrics-api-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-metrics-api-1.4.3.jar; 赠送原API文档:hbase-metrics-api-1.4.3-javadoc.jar; 赠送源代码:hbase-metrics-api-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-metrics-api-1.4.3.pom; ...

    hbase-hadoop-compat-1.1.3-API文档-中英对照版.zip

    赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....

    phoenix-client-hbase-2.2-5.1.2.jar

    phoenix-client-hbase-2.2-5.1.2.jar

    hbase-2.4.17-bin 安装包

    1. 下载与解压:首先从Apache官网下载hbase-2.4.17-bin压缩包,解压到指定目录。 2. 配置环境变量:在系统的环境变量设置中添加HBase的bin目录到PATH,确保可以从命令行启动HBase。 3. 修改配置文件:主要修改`...

    HBase源码(hbase-2.4.9-src.tar.gz)

    HBase源码(hbase-2.4.9-src.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File ...

    hbase-meta-repair-hbase-2.0.2.jar

    HBase 元数据修复工具包。 ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs....③开始修复 `java -jar -Drepair.tableName=表名 hbase-meta-repair-hbase-2.0.2.jar`

    hbase-common-1.4.3-API文档-中文版.zip

    赠送jar包:hbase-common-1.4.3.jar; 赠送原API文档:hbase-common-1.4.3-javadoc.jar; 赠送源代码:hbase-common-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-common-1.4.3.pom; 包含翻译后的API文档:...

    hive-hbase-handler-1.2.1.jar

    被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....

    hbase-2.2.6-bin.tar.gz

    hbase-2.2.6-bin.tar.gz HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所...

    phoenix-4.14.1-HBase-1.2-client.jar

    phoenix-4.14.1-HBase-1.2-client.jar

    hbase-client-2.1.0-cdh6.3.0.jar

    hbase-client-2.1.0-cdh6.3.0.jar

Global site tag (gtag.js) - Google Analytics