`
hongs_yang
  • 浏览: 60999 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

region assign 流程补充说明

阅读更多

region assign的流程补充
Master端:


1.regionserver下线,zk中注册的rs节点下的server子路径session过期被删除,
  master触发RegionServerTracker.nodeDeleted监听事件,并调用ServerManager.expireServer
2.把下线的server添加到deadServers列表中,同时从onlineServers列表中移出此server,
3.触发ServerShutdownHandler.process方法,执行Hlog 的split操作。
4.通过AssignmentManager.assign执行region的分配操作,得到现在可用的所有servers
5.通过LoadBalancer.roundRobinAssignment把要分配的region平均到4中得到的可用servers中。
6.如果配置的balancer实现是FavoredNodeLoadBalancer,那么执行其getFavoredNodes,
  得到每个region可转移的servers列表.
7.检查是否达到批量分配region条件,如果是,执行GeneralBulkAssigner.bulkAssign,否则直接使用assign
8.设置每一个region的状态为offline,同时在zk的region-in-transition中注册此region名称的子路径,
  设置此路径的zk的event type 为M_ZK_REGION_OFFLINE,并生成一个RegionTransition添加到此节点的内容中
9.生成region的RegionPlan实例。并把RegionPlan添加到AssignmentManager.regionPlans列表中。
10.把region的assign状态更新为PENDING_OPEN状态
11.通过ServerManager.sendOpenRegion去请求regionserver的rpc连接,
  并把连接存储到ServerManager.rsAdmin列表中,调用regionserver.openRegion方法开始执行openRegion


RegionServer端:
1.region server接收到openRegion的rpc请求,并解析出要open的所有的region列表
2.检查region是否在RegionServer.onlineRegions中存在,
  同时meta表中此region在当前RegionServer.regionsInTransitionInRS中为非closing状态,
  表示region已经在此server上存在,设置此region的响应状态为ALREADY_OPENED,执行下一个region open
3.region在当前server中不存在,添加region到regionsInTransitionInRS中,设置值为true
4.从RegionServer中的movedRegions列表中移出此region,
5.如果distributedLogReplay设置为true,检查此region在zk中的recovering-regions路径下是否存在,
  如果存在,把region添加到recoveringRegions列表中。
5.1开始执行6与后面的其它流程,同时设置此region的响应状态为OPENED,执行下一个region open
6.此处开始异步执行,检查是否是meta region,如果是执行OpenMetaHandler,否则执行OpenRegionHandler
7.在zk中的region-in-transition路径下把eventtype的状态从M_ZK_REGION_OFFLINE设置为RS_ZK_REGION_OPENING
7.1:master中通过AssignmentManager.nodeDataChanged来处理zk中状态的修改,更新region状态为OPENING,
  触发RegionStates.notify,
8.调用HRegion.openRegion来生成此region实例,openRegion最终调用HRegion.newHRegion,生成HRegion实例
9.调用HRegion实例的openRegion方法。openRegion-->initialize-->initializeRegionInternals
10.调用initializeRegionStores初始化加载region下所有的cf,开启线程调用instantiateHStore,
  并加载每一个cf中的store file,
  得到所有的store中所有的store file中最大的sequenceid与maxMemstoreTS,
  初始化region mvcc的memstoreWrite/memstoreRead为最大的maxMemstoreTS+1
  初始化此Hregion实例的next sequence id(openSeqNum)为最大的sequenceid+1
11.执行replayRecoveredEditsIfAny进行日志重播.得到一个replay后的最大seqid,
  与region store加载得到sequenceid取最大值返回去计算next sequence id.
  Replay会查找region是否存在recovered.edits路径,
  如果distributedLogReplay设置为true,在region open时此路径不存在,因此region的open会相对很快。
12.如果设置有distributedLogReplay为true,同时recoveringRegions列表中包含此region(zk中存在)
  设置HRegion实例的isRecovering=true,
13.执行OpenRegionHandler.updateMeta,生成并启动OpenRegionHandler.PostOpenDeployTasksThread线程
  region的assign分配超时时间通过进行hbase.master.assignment.timeoutmonitor.timeout配置,
  默认为600000ms
  执行HRegionServer.postOpenDeployTasks方法,检查所有store是否需要做compact,并发起compact请求
  如果是user region,更新meta表中此region的location信息,
   主要是region所在的regionserver,当前region实例开启时的sequence id.
  如果是meta region,更新zk中meta-region-server路径下的内容为当前的regionserver
14.更新zk中recovering-regions路径下region的last seqid,每一个store的last seqid.
15.从HRegionServer的regionsInTransitionInRS列表中移出此region,添加到onlineRegions列表中
16.把zk中region-in-transition路径下把eventtype的状态从RS_ZK_REGION_OPENING设置为RS_ZK_REGION_OPENED
16.1:master中通过AssignmentManager.nodeDataChanged来处理zk中状态的修改,更新region状态为OPEN,
  把region对应的regionserver添加到RegionStates.lastAssignments中,触发RegionStates.notify,
  生成一个OpenedRegionHandler实例,并执行其process处理,检查如果region的状态为open,
  同时zk中此region的eventtype为RS_ZK_REGION_OPENED,删除zk中region-in-transition路径下此region的路径
16.2:master中更新region状态为open后会删除zk中此region的transition路径,
  触发AssignmentManager.nodeDeleted处理。
  从RegionStates.regionsInTransition中移出此region的transition,
  在RegionStates.regionAssignments中添加此region对应的server
  在RegionStates.serverHoldings中此server中添加此open成功的region
  在AssignmentManager.regionPlans中移出此region对应的assign计划

分享到:
评论

相关推荐

    ios_assign,retain和copy详解

    关于属性声明,需要补充的知识点还包括readonly和readwrite属性。readonly表示属性是只读的,只能通过getter方法访问。readwrite表示属性是可读写的,既可以通过getter也可以通过setter方法访问。 此外,内存管理...

    对于Retain和Assign属性的理解

    这个模型中,`Retain`和`Assign`是两个重要的属性,它们决定了对象间的引用计数如何处理。本文将深入探讨这两个属性,以及它们在内存管理和对象生命周期中的作用。 首先,`Retain`属性是Objective-C中一种常见的...

    object-assign_Objectassign_

    《深入理解JavaScript中的Object.assign与对象合并》 在JavaScript中,`Object.assign`是一个非常实用的方法,用于合并多个源对象的属性到一个目标对象中。这个功能在开发过程中经常被用到,特别是在处理数据合并、...

    retain和copy还有assign的区别

    ### retain、copy与assign的区别详解 #### 一、前言 在Objective-C中,了解`retain`、`copy`和`assign`这三个属性对于管理内存至关重要。这些属性主要用于定义对象属性时,它们决定了如何处理对象的引用。本文将...

    前端开源库-es-object-assign

    **前端开源库-es-object-assign** 是一个针对JavaScript编程中的对象合并问题的开源库,它在ES2015(也称为ES6)环境中提供了一种友好的解决方案。在JavaScript中,对象是引用类型,因此直接复制对象时,只会复制...

    maven 3.5.0 Cannot assign configuration entry 'pluginArtifacts' with value '${pl

    标题 "maven 3.5.0 Cannot assign configuration entry 'pluginArtifacts' with value '${pl" 描述了一个在使用 Maven 3.5.0 版本时遇到的问题,该问题涉及到配置项 'pluginArtifacts' 的赋值错误,错误信息显示尝试...

    assign_matlab里的assig_matlabassign_全局指派_匈牙利算法_

    《MATLAB中的assign_matlabassign_全局指派_匈牙利算法详解》 在MATLAB编程环境中,"assign_matlabassign_全局指派_匈牙利算法"涉及到的是一个优化问题的解决方法,特别是用于处理任务分配或资源匹配的问题。这篇...

    Learning to Assign Orientations to Feature Points

    "Learning to Assign Orientations to Feature Points"的研究工作聚焦于改进特征点方向的计算方法。传统的特征点方向分配通常基于局部梯度信息,例如SIFT(尺度不变特征变换)算法。然而,这种方法可能会受到噪声、...

    Ios retain assign区别

    ### iOS开发中retain与assign的区别 在iOS开发中,Objective-C是主要使用的语言之一,而Objective-C中的属性声明是理解对象交互方式的关键。本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`...

    assign2023.py

    assign2023.py

    Phone assign

    设备适配辅助性脚本

    Assign1.py

    Assign1.py

    USB Type-C ECN - Assign Cable SOP state clarification

    Section 4.5.2.4.2 Assign Cable SOP* State is incorrect. Passive cables never respond on SOP” per USB PD. The change is to remove the sentence “If two eMarkers are powered at the same time in a ...

    RAPTOR流程图+算法设计教程课件.zip

    RAPTOR(Read, Assign, Print, Operate, Terminate)是一种面向初学者的流程图编程语言,它以图形化的方式帮助学习者理解基本的程序设计概念。这份教程课件旨在帮助学生掌握如何使用RAPTOR工具来创建流程图,并将其...

    assign-issues-action

    这是将所有新问题自动分配给octocat用户的示例流程: name : Issue assignment on : issues : types : [opened] jobs : auto-assign : runs-on : ubuntu-latest steps : - name : ' Auto-assign issue ' ...

    UIPath创建流程图

    你可以通过拖放更多的活动(如“Start”、“End”、“Assign”等)到画布上,构建流程的骨架。每个活动代表一个具体的任务或操作。 4. **连接活动** 流程图中的连接线用于表示活动的执行顺序。将鼠标悬停在活动的...

    assign3-源码.rar

    【assign3-源码.rar】是一个压缩包文件,通常包含一系列源代码文件,可能是某个编程项目的第三部分,也就是“assign3”。源码是程序开发的基础,它由程序员编写,用高级语言描述了软件的功能和逻辑。这个压缩包可能...

    Assign6 solution.sql

    Assign6 solution.sql

    Task Assign To People

    标题“Task Assign To People”暗示了我们正在讨论与任务分配相关的IT主题,这通常涉及到项目管理、团队协作或工作流程自动化。在这个场景中,“TaskAssign”标签进一步强化了这一概念,意味着我们将关注如何有效地...

Global site tag (gtag.js) - Google Analytics