HBase2.0 procedureV2原理简析

简介: 总体流程图 就绪区: 这部分的核心实现类是MasterProcedureScheduler,主要的作用就是对Procedure进行调度; 从排队的角度看,可以认为存在三层队列调度; type队列: type包含meta、server、table,,三者之间存在优先级:meta>server>t.

总体流程图

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会阻塞,如果读锁被获取,那么需要写锁的proc会阻塞,而其它需要读锁的proc则不会阻塞;

执行区:

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

等待区:

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

等待锁:

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

等待某事件:

处于此类等待中的proc会放在一些ProcedureEvent中,这些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;

目录
相关文章
|
存储 分布式数据库 Hbase
HBase scan过程简析
HBase scan过程简析。 scan过程总体上是分层处理的,与存储上的组织方式一致,脉络比较清晰; 具体来说,就是region->store→hfile/memstore,分别都有对应的scanner实现进行数据读取; scan请求本身设置的条件,以及server和table层面的一些参数限制,会根据需要分布在不同层次的scanner中进行处理; 2.
2183 0
HBase scan过程简析
|
Java Shell 分布式数据库
hbase shell实现原理简析
hbase的交互式命令行是通过jruby实现的,当我们输入hbase shell时,实际上最终执行的是org.jruby.Main,并以bin/hirb.rb作为参数,注意是根目录下bin目录中的hirb.
2125 0
|
API 分布式数据库 Hbase
|
算法 测试技术 分布式数据库
|
6月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
154 0
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
88 4
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
68 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
31 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
56 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
69 2