`
tangay
  • 浏览: 94673 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HBase的Region分配探索

阅读更多

Region 分配

 HBase cluster 中, Region 是如何分配这个问题,困扰了我很久,经过代码分析和调试,得出了一些见解,缺点和错误请大家批评指正。

 

参与 Region 分配的重要对象

Region 分配过程中,起着重要作用有如下一些对象。

 

  • HMaster— HBase 中的 Master server ,仅有一个。
  • HRegionServer--- 负责多个 HRegion 使之能向 client 端提供服务,在 HBase cluster 中存在多个 HRegionServer

 

 

  • ServerManager--- 负责管理 Region server 信息,比如每个 Region server HServerInfo( 这个对象包含 HServerAddress startCode), load Region 个数,死亡的 Region server 列表

   

  •   RegionManager --- 负责将 region 分配到 region server 的具体工作,还有监视 root meta 2 个特殊 region 的状态。
  • RootScanner --- 定期扫描 root region ,以发现没有分配的 meta region
  • MetaScanner--- 定期扫描 meta region, 以发现没有分配的 user region

 

这些对象的关系如图所示:


 

Region 分配过程

 

  • Root region 的分配

 

HMaster 起动时,首先会通过 RegionManager rootRegionLocation (里面包含 HServerAddress )的值置为 null ,然后把 root region 从待处理 region 列表中移除(如果有的话),然后重新将其放入待处理 region 列表( regionsInTransition ),并将其状态设置为 UNASSIGNED( 未分配 ).

 

当一个 Region server 启动完成时,它会调用 reportForDuty 函数向 HMaster 报告它的启动,报告当然是通过 HMasterRegionInterface regionServerStartup 方法。然后 HMaster 会把 Region server 的报告转交给 ServerManager regionServerStartup 方法处理。 ServerManager 会将这个新的 RegionServer 加入 region server 列表并且把它的 server load 设为空闲的。

 

RegionServer 会定期发送报告给 HMaster ,请求 HMaster 进一步的指示。发送报告是通过 HMasterRegionInterface regionServerReport 方法。 HMaster 接到报告后,移交报告给 ServerManager regionServerReport 方法处理。 ServerManager 会查询

regionServer 的状态,得到一个 HServerInfo 对像,然后检查 RegionServer 是否为正常的。如果为正常的话, ServerManager 会查询 regionserver 的负载( HServerLoad ),更新一个 loadToServers map 。然后进入 ServerManager processMsgs 函数处理。

 

ServerManager 会检查该 regionServer 的已经打开的 region 的数目,如果打开的 region 数目少于一个固定的值(对应配置文件中的 hbase.regions.nobalancing.count ),然后就会调用 RegionManager assignRegions 方法。

 

RegionManager 会向 ServerManager 查询,现在已启动的 RegionServer 有几个,如果只有一个的话,会做特别处理。

 

然后 RegionManager 调用自己的 regionsAwaitingAssignment 方法去取得等待分配的 region 集合。它先会特别考虑 root region ,如果它查到 root region 尚未被分配,它会马上返回只包含 root region 的集合。

 

如果没有任何 region 未分配的话而且并未处在安全模式, RegionManager 会让 loadBalancer 执行负载均衡的动作(就是可能把该 regionserver 负责的 region 分一点出去)。 反之如果有待分配的 region serverManager 会调用自己的 assignRegionsToMultipleServers

方法。

 

assignRegionsToMultipleServers 中,参数 regionsToAssign 是所有待分配的 region 集合,因为存在多个 regionServer, 所以 regionManager 会考虑到多个 regionServer 的负载。 regionManager 会先调用 regionsToGiveOtherServers 方法,求出其他 regionServer (比如相对负载较轻的)应该承载的 region 数目,那么当前 regionServer 可能承载的 region 个数就是待分配的 region 总数目减去其他 regionServer 应该承载的 region 数目,这个数量我们暂称之为 N 。如果 N<=0 并且 Meta Region 如果已被分配的话,该 regionServer 会被略过,不会被要求承载 region 。因为比当前 regionServer 的负载轻的 regionServer 个数超过了待分配的 region 个数,轮不到当前的 regionServer

 

看起来快水落石出了,但是剩下事情还有点复杂。 regionManager 还会调用 computeNextHeaviestLoad 方法,算出 cluster 中有多少 regionServer 超过当前的 regionServer ,这个数目我们暂称之为 NS ,同时该方法会抓出负载最重的 server 的负载。

 

接着 regionManager 会求出当前 regionServer 负责的 region 数目和负载最重的 regionServer 负责的 region 数目之间的差值。如果这个差值大于 N ,那么 N region 将全部会交由当前 regionServer 负责。反之这个差值小于N,如果 NS 大于零,当前 regionServer 要被分配的 region 数量为 (int)Math.ceil(1.0*N/1.0*NS), 如果 NS 等于零,那么当前 regionServer 要被分配 region 的数量为 (int)Math.ceil(1.0*N/1.0*regionServer 总数 )

 

 

然后 root region 就会被分配到该 RegionServer 上。

 

这里特别要提下:如果有多个 region serve 存在, HBase 不会把 root region meta region 分配到一个 RegionServer 上。

 

 

  • Meta region 的分配

 

一旦 root region 被分配完成, RootScanner 线程将被唤醒。然后它会 scan root region

 

scan 过程中,碰到每个 meta region 条目,它会调用 checkAssigned 函数检查,改 meta region 是否被分配,如果没有的话, regionManager 将会记录之,把该 region 加入待分配的 region 列表中。

 

一旦有 RegionServer 定期报告来了, meta region 会像 root region 一样的方式被分配。

 

 

  • User region 的分配

 

一旦 meta region 被分配完成, MetaScanner 将被唤醒,然后它会 scan  meta region

 

scan 过程中,碰到每个 user region 条目,它会调用 checkAssigned 函数检查,该 user region 是否被分配,如果没有的话, regionManager 将会记录之,把该 region 加入待分配的 region 列表中。

 

一旦有 RegionServer 定期报告来了, user region 会被分配。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

  • 大小: 16.5 KB
分享到:
评论

相关推荐

    HBase 应用平台 balancer 功能

    HMaster是HBase的管理节点,负责Region的分配、RegionServer的监控和故障恢复。每当HMaster检测到不平衡的Region分布,它就会启动balancer策略。 对于源码探索,我们可以查看HBase的源代码仓库,如Apache HBase的...

    HBase源代码 hbase-0.98.23

    此外,HBase的Master节点是整个系统的管理者,`org.apache.hadoop.hbase.master.HMaster`类负责Region的分配、RegionServer的监控和故障恢复。通过分析`org.apache.hadoop.hbase.masterAssignment.RegionStates`和`...

    hbase-1.3.5-bin.tar.zip

    Master负责全局的表管理和 Region分配,而RegionServer则负责实际的数据存储和处理。这种设计保证了系统的高可用性和扩展性。 2. HBase的数据模型 HBase中的数据以行(Row)和列族(Column Family)的形式组织,每...

    hbase-1.3.6-src.tar.gz

    - 探索优化策略,如Region分配策略、数据缓存机制等。 - 自定义扩展,满足特定业务需求,如开发自定义过滤器、Region分裂策略等。 通过对HBase 1.3.6源码的学习和研究,开发者不仅可以掌握HBase的基本操作,还能...

    HBase Administration Cookbook

    Master节点负责表的元数据管理、Region分配和集群监控,而RegionServer则是数据存储和处理的主体。理解这些组件的工作原理对于优化HBase性能至关重要。 此外,书中还会探讨HBase的数据模型,包括行键(Row Key)的...

    HBase指南-带书签高清扫描版pdf

    Master节点负责Region的分配和管理,ZooKeeper则提供高可用性和故障恢复。此外,HBase还支持时间戳,每个数据项都有多个版本,可以根据需要保留历史记录或进行版本控制。 对于开发人员来说,理解HBase的API和查询...

    最新版linux hbase-2.3.2-client-bin.tar.gz

    《Linux环境下HBase 2.3.2客户端的探索与应用》 HBase,作为Apache软件基金会的一个开源项目,是构建在Hadoop分布式文件系统(HDFS)之上的分布式、面向列的数据库,专为大数据设计,支持海量数据的实时读写。在...

    小镜子之hbase学习

    1. Master节点:负责表和Region的管理,包括 Region分配、Region分裂和Region移动等操作。同时,它还监控RegionServer的状态,确保集群的高可用性。 2. RegionServer节点:实际存储数据的地方,每个RegionServer...

    1-5+HBase+在网易的探索实践.pdf

    1. **Region一致性**:确保每个region都正确地分配并部署到唯一的RegionServer上,且在内存、hbase:meta表和Zookeeper中的状态一致。 2. **表完整性**:检查每张表的rowkey分布,确保rowkey不会存在于多个region区间...

    5大数据技术之HBase.doc

    《深入理解大数据技术:HBase探索》 HBase,全称为Hadoop Database,是一种基于Apache Hadoop生态系统的分布式、高性能、可扩展的NoSQL数据库。它专为处理大规模数据而设计,尤其适用于实时读写场景,是大数据领域...

    小镜子之hbase2.0.5的学习

    HMaster负责区域分配、元数据管理以及故障恢复,RegionServer则处理数据存储和用户请求。 **4. 数据模型** - **行键(Row Key)**:HBase中的数据是按行键排序的,行键是不可分割的字节数组,决定了数据的存储位置...

    Apache Phoenix and HBase Past, Present and Future of SQL over HBase

    HBase 采用了 Master/RegionServer 的架构模型,其中 Master 负责管理 RegionServer 并分配数据区域(Region)。每个 RegionServer 负责处理特定区域的数据读写请求,并将数据存储在 DataNodes 上。 **Phoenix 架构...

    hbase-code-analysis:nosql数据库hbase的源码分析

    Master服务器在HBase中扮演着重要角色,它负责RegionServer的监控、Region的分配和平衡、以及元数据的管理。源码中,`org.apache.hadoop.hbase.master.HMaster`是Master的主要实现类,包含了一系列的管理服务。 总...

    2013年Intel南京大学大数据技术培训小结

    7. **Region负载均衡**:高级的Region分配算法,适应多应用、多用户的场景。 8. **HBase复制控制**:精细控制不同表和列族的复制份数,以优化资源利用。 【南京大学研究进展】 黄宜华教授领导的研究团队在大数据...

    中科院-国科大-数据库新技术

    3. **一致性哈希算法**:通过计算哈希值来确定数据存储的位置,支持动态添加或删除节点而无需重新分配所有数据。 4. **云计算的服务类型**:基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)。 5. *...

Global site tag (gtag.js) - Google Analytics