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

HBase源码阅读-5-HMaster对HRegion的管理

阅读更多

5.HMaster对HRegion的管理:master将region的分派,状态管理等工作委托给RegionManager
        (1)RegionManager成员变量:rootRegionLocation,root region所在regionserver地址;
                            rootScannerThread和MetaScanner,root及meta region的扫描线程;
                            numberOfMetaRegions,meta regions数量由rootScannerThread设置;
                            onlineMetaRegions,在线的meta regions
                            regionsInTransition,记录正在状态变化中的region,region的状态有:
                                UNASSIGNED-等待分配到server
                                PENDING_OPEN-告诉server打开,但还未完成
                                OPEN-已打开region,但尚未在meta region中标识
                                CLOSING-已将close msg放入队列中,但还尚未发送到regionserver
                                PENDING_CLOSE-已将regionserver发送给regionserver
                                CLOSED-已关闭region,但尚未在meta region中标识
                            maxAssignInOneGo,一次分配给一个regionserver的最多region数量
                            LoadBalancer,负责regionserver间负载均衡
                            regionsToSplit,regionsToCompact,regionsToMajorCompact,regionsToFlush,需split/compact/MajorCompact/Flush的region
        (2)RegionManager工作流程:
            HMaster初始化时创建RegionManager实例;
            清除RegionManager中root region的地址及状态信息,设置root region状态为UNASSIGNED并加入regionsInTransition中;
            HMaster启动各种后台服务时,RegionManager后台启动rootScannerThread和metaScannerThread线程;   
            regionserver向master报告时,ServerManage在regionServerReport方法中调用RegionManager来处理跟region相关的msg.
           
        (3)RegionManager处理各种Region相关HMsg   
            a.regionserver正在关闭
                RegionManager关闭该regionserver上的所有region,包括root,meta和user region,并对root meta和online的user regionr重新分配,对offline user region从regionsInTransition删除其状态信息
            b.regionserver已open指定region
                RegionManager判断该region是否重复分配了,重复分配则返回关闭该region指令;
                若open的是root region,则在master的ServerConnection和RegionManager中记录root region所在地址;
                若open user region,具体操作参见ServerManager       
            c.regionserver已关闭指定region:
                关闭root region:???
                关闭meta region:从RegionManager的onlineMetaRegions中删除该region;
                regionsInTransition中设置该region为CLOSED;
                向master的RegionServerOperationQueue中增加ProcessRegionClose操作:往meta中写入该region offline状态,或若该region需重新分配则RegionManager设置该region待分配状态
            d.regionserver已split某个region:   
                读取连续的后两条HMsg从中取出分裂产生的两个HRegionInfo;
                从regionsToSplit和regionsToCompact中删除被分裂的HRegionInfo;
                从onlineMetaRegions中查找应包含新region的meta region,并尝试从对应的regionserver中读取新region,若存在则不做处理,不存在则将新region设置成待分配状态;
                若meta region被分裂,则从onlineMetaRegions中删除掉该region,并增加meta region的数量numberOfMetaRegions;
           
        (4)组织返回给regionserver的HMsg:
            a.对一个标记为需Close的region,增加一条MSG_REGION_CLOSE的HMsg,并在中regionsInTransition设置其状态为PENDING_CLOSE
            b.若正执行open region的数量少于hbase.regions.nobalancing.count指定的值,则从regionsInTransition中获取待分配的region(root region优先)   
            c.若无region分配给该regionserver,则比较该regionserver的region负载数量和整个集群的平均负载+slop系数(由参数hbase.regions.slop指定),由一算法(balanceFromOverloaded和balanceToLowloaded方法)
                计算该regionserver需close的region数量,并从负载最严重的region中选择指定数量的非root、meta region和不在regionsInTransition中的region,发出HMsg在该regionserver中close这些region,并设置状态为PENDING_CLOSE
            d.综合考虑多个整个集群的负载,    将需分配的region分配到多个regionserver:
                通过ServerManager找出负载最轻的那些regionserver,分摊一些region到这些regionserver;
                doRegionAssignment方法分配一个region到指定regionserver,设置状态状态为PENDING_OPEN,并发送MSG_REGION_OPEN消息;
            e.从regionsToCompact,regionsToSplit,regionsToFlush,regionsToMajorCompact中获取需要执行对应操作的region并发送对应HMsg   
               
                       
        (5)MetaScanner和RootScanner线程               
        这两个线程都继承自BaseScanner,通过初始化时扫描root和meta region可以知道所有的region并进行分配;当分裂一个region时,regionserver会通知master分配新region,但master可能
        会丢失这些分裂信息,而新region通常没有regionserver的信息,因此周期性地扫描发现这些新region并进行分配。
            a.RootScanner运行时机:master收到regionserver的root region被open指令;首次扫描后定期自动扫描
                扫描过程描述:
                    从RegionManager获取root region所在rs地址;
                    通过master的ServerConnection获取HRegionInterface接口代理,遍历root region内所有meta region的记录;
                    检查region对应的HServerInfo是否存在,不存在则表示尚未分配rs,加入到regionsInTransition,设置状态为UNASSIGNED;
                    检查所有已分裂的parent,
                   
            b.MetaScanner运行时机:当一个meta region上线;定期自动扫描上线的meta region;扫描过程逻辑类似RootScanner

分享到:
评论

相关推荐

    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...

    phoenix-hbase-2.4-5.1.2

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

    hbase-1.2.1-bin.tar.gz.zip

    标题“hbase-1.2.1-bin.tar.gz.zip”表明这是HBase 1.2.1版本的二进制发行版,以tar.gz格式压缩,并且进一步用zip压缩。这种双重压缩方式可能用于减小文件大小,方便在网络上传输。用户需要先对zip文件进行解压,...

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

    本文将深入探讨这两个技术及其结合体`phoenix-hbase-2.2-5.1.2-bin.tar.gz`的详细内容。 首先,HBase(Hadoop Database)是Apache软件基金会的一个开源项目,它构建于Hadoop之上,是一款面向列的分布式数据库。...

    phoenix-hbase-1.4-4.16.1-bin

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

    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; ...

    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-2.4.17-bin 安装包

    5. Indexing:虽然HBase本身不支持索引,但可以通过第三方库如 phoenix 或 hbase-indexer 实现索引功能。 六、监控与维护 1. 使用HBase自带的JMX监控工具或第三方监控工具(如Ambari、Grafana)监控HBase集群的...

    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-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文档:...

    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`

    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.0.2-bin.tar

    这个压缩包"**hbase-2.0.2-bin.tar**"包含了HBase 2.0.2的二进制发行版,它是针对大规模数据存储而优化的。HBase构建于Hadoop之上,充分利用了Hadoop的HDFS(Hadoop Distributed File System)作为底层存储,并且...

    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

    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-5.0.0-HBase-2.0-client

    "phoenix-5.0.0-HBase-2.0-client" 是一个针对Apache HBase数据库的Phoenix客户端库,主要用于通过SQL查询语句与HBase进行交互。这个版本的Phoenix客户端是为HBase 2.0版本设计和优化的,确保了与该版本HBase的兼容...

Global site tag (gtag.js) - Google Analytics