热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HBase2.0procedureV2原理简析

hbase2,0,procedur

总体流程图

pv2_

就绪区:

pv2_

这部分的核心实现类是MasterProcedureScheduler,主要的作用就是对Procedure进行调度;

从排队的角度看,可以认为存在三层队列调度;

type队列:

type包含meta、server、table,,三者之间存在优先级:meta>server>table,这里需要注意的是,所谓type队列是逻辑上来说的,worker在获取任务时会按优先级依次进行尝试;

entity队列:

上述每种类型都对应一个FairQueue,该队列中的元素代表与某个实体相关的一组proc,这里称为proc队列,worker获取任务时,是从entity队列中获取的,所以只有存在于entity队列中的proc队列才有运行机会;

proc队列:

这个队列中存放的就是具体的proc了,队列内部元素数量和锁状态的变化,决定了其是否存在于entity队列中,也即是否有运行机会,以下时机会对此产生影响;

将proc队列放入entity队列的时机:

  1. 往proc队列里面添加proc;
  2. worker执行完一个proc;

将proc队列从entity队列删除的时机:

  1. worker获取并尝试执行一个proc;

以上说的是时机,具体是否放入或删除,需要看锁需求和锁状态,基本上就是读写锁的逻辑;

执行区:

每个proc都定义了一组state,worker从初始状态开始,依次执行状态对应的动作直到结束,或者因故挂起等待;

等待区:

proc可能会由于一些执行条件不满足,而处于等待状态,主要有以下几种情况;

等待锁:

每个proc队列都会对应一个LockAndQueue,对于正在等待锁的proc,会暂时放在其里面的队列中;

等待某事件:

处于此类等待中的proc会放在一些ProcedureEvent中,具体实例会放在与之相关的实体中,主要有以下三种;

  • region rit:RegionStateNode
  • meta assign/load:AssignmentManager
  • master initialized:HMaster
等待子proc完成:

处于此类等待中的proc没有进行特殊的保存,当subProc运行完成,会根据childrenCountDown判断它是否是最后一个,如果是的话,则根据其携带的parentProcId从ProcedureExecutor的procedures中获取parentProc,将其唤醒;

回滚区:

不存在parentProc的proc都会对应一个RootProcedureState,内部通过一个subprocStack来保存已执行的proc及其状态,回滚时按顺序执行rollBack,这里值得注意的是,同一个proc如果已经被执行了多个步骤,那么在stack中会有多个引用变量指向它;

持久区:

当前的实现类是WALProcedureStore,数据存放在hdfs的MasterProcWALs目录;
由于这部分的实现与region的写入过程比较相似,在社区比较新的版本中,已经改为RegionProcedureStore,数据组织上跟region类似,只是目录为MasterProcs;


推荐阅读
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
author-avatar
o0沢田纲吉0o
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有