HBase2.0 procedureV2原理简析
总体流程图
就绪区:
这部分的核心实现类是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队列的时机:
- 往proc队列里面添加proc;
- worker执行完一个proc;
将proc队列从entity队列删除的时机:
- 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;

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
基于云存储网关的Veeam备份归档上云方案
前言 面对数据可靠性和合规性要求的不断增长,只备份一份数据已经不能满足用户对于数据可靠性的需求。传统备份厂商的异地备份方案是将用户生产环境里的数据备份至不同机柜或者异地机房来保护数据,规避单机房存在的机柜或机房断电断网等问题。公共云的出现改变了整个备份的架构和方案。依托公共云存储的高可靠性和高可用性,用户可以选择将数据直接备份至公共云或者将第二级备份放在公共云上。 用户在面对公共云和传统备份架构时,该如何选择呢?是继续保留已有的备份架构和方案,还是使用传统的备份厂商的软件上云,还是直接使用云厂商的备份归档方案上云,或者是传统备份软件与云厂商的产品结合的方案?本文结合Veeam备份软件的使用,一方面来阐述传统备份软件是如何与阿里云云存储网关产品结合,将用户数据备份上云的,另一方面也试着给出一些想法和建议,用于指导用户结合自身的情况做选择。 - 基于云存储网关两种部署方式的Veeam备份归档上云方案 以下是基于云存储网关的Veeam备份归档上云方案架构图。取决于用户机房的实际情况,如果线下备份数据量不大,且线下已经部署了虚拟化平台,如VMware,Hyper-V,KVM虚拟化服务器,可以通...
-
下一篇
这份Java Web必读书单,值得所有Java工程师一看!
点击蓝色“程序员书单”关注我哟 加个“星标”,每天带你读好书! 经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,而目前市面上最流行的Java Web框架已然是Spring全家桶,从过去的Spring,SpringMVC,再到SpringBoot。而曾经流行的JSP和servlet,随着前后端分离的趋势,以及Spring这类框架的冲击,也逐渐地淡出了人们的视线,被历史所抛弃。 那么今天如果我们要学习Java Web,应该按照什么样的一个路线去学习呢,其实,而很多技术虽然已经过时,但是我们仍有必要了解一些它们的历史和发展历程,就比如servlet,曾经需要我们显示进行开发,而现在则内嵌在了springMVC框架中,还有Tomcat,干脆直接包在了框架里,但实际上这些技术还是值得我们去学习和了解的。 这份书单将会推荐几本我认为在学习Java Web方面上比较合适的优质书籍,从JavaWeb基础开始,再到SSM框架开发实战,然后是SSM框架的原理解读和源码解析,还有最后一本书,干脆直接叫你写一个Java Web框架,是不是感觉有“从入门到精通”的意思了。不管怎么说,这份书...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装