`
punishzhou
  • 浏览: 142688 次
社区版块
存档分类
最新评论

HBase的RS关闭过程和Region重分配(二)

阅读更多

上一篇blog谈到了rs挂掉的几种情况。

 

HBase作为nosql的一种产品,应用于大规模分布式的海量数据,其中有一个优点就是其对于机器down掉的容错性。

客户端不需要关注机器是否挂掉或者怎么样,server会自动处理down的server,处理器上的region并分配到其他server从而最大限度地提高系统可用性

 

今天来看看当rs挂掉以后的处理情况。

 

前面我们说过rs启动以后会在zk上的rs目录下注册自己的节点,而master监听了这一节点的变化包括delete,changed,created等动作。此时master监听到了node deleted事件会按如下处理:

    this.deadservers.add(serverName);
    this.onlineServers.remove(serverName);
    this.serverConnections.remove(serverName);    CatalogTracker ct = this.master.getCatalogTracker();
    // Was this server carrying root?
    boolean carryingRoot;
    try {
      HServerAddress address = ct.getRootLocation();
      carryingRoot = address != null &&
        hsi.getServerAddress().equals(address);
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
      LOG.info("Interrupted");
      return;
    }
     HServerAddress address = ct.getMetaLocation();
    boolean carryingMeta =
      address != null && hsi.getServerAddress().equals(address);
    if (carryingRoot || carryingMeta) {
      this.services.getExecutorService().submit(new MetaServerShutdownHandler(this.master,
        this.services, this.deadservers, info, carryingRoot, carryingMeta));
    } else {
      this.services.getExecutorService().submit(new ServerShutdownHandler(this.master,
        this.services, this.deadservers, info));
    }
 

 逻辑也比较简单,从master内存中删除该rs,删除connection,判断是否有root或是meta在其上

然后起线程servershutdown来处理,servershutdown的处理如下:

首先把该rs的log split掉,按region分别放到每个region目录下的recovered.edits 目录下,一个线程读3个线程写

splitLog(serverName)

 

 清除所有到该rs的regionplan,清楚master内存上的该rs的region,找到online的处于rit队列中的该rs的region

List<RegionState> regionsInTransition =
      this.services.getAssignmentManager().processServerShutdown(this.hsi);

  若包含root或是meta则需assign

    if (isCarryingRoot()) { // -ROOT-
      try {
    	 this.services.getAssignmentManager().assignRoot();
      } catch (KeeperException e) {
        this.server.abort("In server shutdown processing, assigning root", e);
        throw new IOException("Aborting", e);
      }
    }

    // Carrying meta?
    if (isCarryingMeta())this.services.getAssignmentManager().assignMeta(); 

 等待meta表上线,扫描meta表,寻找需要重新assign的region,其中为处于RIT队列中的会重新分配,处于RIT中且状态是PENDINGCLOSE或是CLOSING的将重新assign,而RIT中的其他状态不许重新分配,因为RIT超时后会自动reassign这些region

 for (RegionState rit : regionsInTransition) {
      if (!rit.isClosing() && !rit.isPendingClose()) {
        LOG.debug("Removed " + rit.getRegion().getRegionNameAsString() +
          " from list of regions to assign because in RIT");
        hris.remove(rit.getRegion());
      }
    }
for (Map.Entry<HRegionInfo, Result> e: hris.entrySet()) {
      if (processDeadRegion(e.getKey(), e.getValue(),
          this.services.getAssignmentManager(),
          this.server.getCatalogTracker())) {
        this.services.getAssignmentManager().assign(e.getKey(), true);
      }
    }

 而在上面的挑选region assign的过程当中会存在bug

 

如一个region 从A move 到B ,其操作为close region IN A 然后 open region In B 。但是当region在B上线之前,此时由于已经关闭了region,故该region在master处是offline的,但是在meta表中还存在,而且RIT队列中也有。

如此时A server 挂掉,那么通过上述的分配规则,显然region 要assign,而此时 region 在B中上线,然后RIT队列中又存在一个对region的分配,从而造成region的二次分配,二者会对数据的一致性造成很大的影响

 

分享到:
评论

相关推荐

    HBASERegion数量增多问题描述及解决方案.docx

    【HBASERegion数量增多问题...通过合理设计ROWKEY、适时合并Region以及优化配置,可以有效地解决Region数量过多的问题,提升HBase集群的性能和稳定性。同时,监控和定期评估Region分布状况也是维护系统健康运行的关键。

    hbase负载均衡算法分析

    HBase 负载均衡算法的实现主要是通过 Region 的分配和负载均衡来实现的。 Region 的初始分配策略是 Master 负责对 Region 的分配,而集群负载均衡算法主要是集中在文件 LoadBalancer.java 文件中,方法 ...

    hbase用于查询客户端工具

    6. **HBase Console**:这是HBase提供的一个简单的Web界面,用于查看表的信息、region分布和集群状态。它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop...

    HBase架构简介.pdf

    HBase的主节点(HMaster)负责region的分配和负载均衡。当HBase启动时,HMaster会将`.ROOT.`和`.META.`表的region分配给HRegionServer(RS)。每个RS管理多个region,并为每个region创建一个HRegion对象。每个...

    HBase运维实践-聊聊RIT的那点事

    当Region状态在变迁过程中出现异常时,如RegionServer未正确处理关闭或分配命令,可能会导致Region长时间处于RIT(Region-In-Transition)状态。这时,HMaster会尝试重试操作或采取其他恢复策略,例如强制关闭...

    hbase性能调优.pdf

    HBase 的性能调优需要考虑到多个因素,包括 Zookeeper 的 session timeout、RegionServer 的 IO 线程数和 Region 的大小。只有通过深入了解 HBase 的架构和机理,才能对这些配置项进行合理的调整,以提高 HBase 的...

    HBase优化-系统架构

    【HBase优化-系统架构】主要探讨了针对HBase性能的优化策略,特别是从系统架构层面进行调优的方法。HBase作为一个分布式、列族式的NoSQL数据库,性能优化至关重要,尤其是对于大数据处理场景。 首先,关注到配置...

    Hadoop之Hbase从入门到精通.docx

    HBase性能调优 HBase是一种分布式、面向列的NoSQL数据库,作为...通过调整RegionServer与Zookeeper的连接超时时间、RegionServer的请求处理IO线程数、Region的最大存储空间等参数,可以提高HBase的性能和稳定性。

    hbase性能调优[借鉴].pdf

    当RegionServer与Zookeeper间的连接超时,RegionServer会被从RS集群中移除,引发HMaster进行region的重新分配。调优时需谨慎,降低超时时间可以缩短RegionServer故障后的failover时间,但也可能因过于敏感的超时设置...

    HBase性能调优

    总的来说,HBase的性能调优涉及到多个层面,包括Zookeeper的稳定性、RegionServer的并发处理能力和Region的大小管理。每项参数的调整都需要根据实际应用的负载、资源限制和业务需求来进行,通过持续监控和压力测试,...

    2013中国大数据技术大会PPT——360超大规模HBASE集群的改进

    专属MetaServer只服务于metaregion,避免了原有的共用RegionServer(RS)带来的物理资源(比如网络IO)和软件资源(如RPC handle, compaction queue等)的竞争问题。 2. 针对集群启动时间过长的问题进行了优化:这...

    基于HadoopHBase的一淘搜索离线系统PPT课件.pptx

    一淘搜索系统是基于Hadoop和HBase构建的大型分布式搜索和存储解决方案,主要用于处理海量的电子商务数据。这个系统架构包括以下几个关键组成部分: 1. **一淘搜索系统架构**: 一淘搜索系统主要由抓取系统、存储...

    基于hadoop监控的grafana模板

    HMaster (HM) 负责区域服务器管理和表的元数据,RegionServer (RS) 存储实际数据。Grafana模板可以展示HBase的读写请求、Region分布、内存使用情况等。 4. Hive: 是一个数据仓库工具,用于查询和管理大规模数据集。...

Global site tag (gtag.js) - Google Analytics