HBase Region 各个状态的转换
Region 各个状态的转换
HBase 维护了每个 region 的一个状态信息,并保存在 hbase:meta 中。hbase:meta 本身region的状态信息被持久化到 ZooKeeper。也可以在 HBase Master Web UI 里查看到 regions 的转换状态。以下是一个 region 可能出现的状态:
1. OFFLINE:region处于offline 状态,not opening
2. OPENING:region处于正在被opened 状态
3. OPEN:region处于打开状态,并且RegionServer已经通知了master
4. FAILED_OPEN:RegionServer未成功open这个region
5. CLOSING:region处于正在被关闭的状态
6. CLOSED:RegionServer已经关闭了region并且通知了master
7. FAILED_CLOSE:RegionServer close region 失败
8. SPLITTING:RegionServer 通知了master 当前region正在splitting
9. SPLIT:RegionServer通知master当前region已经完成splitting
10. SPLITTING_NEW:当前region由于split的原因,在被创建过程中
11. MERGING:RegionServer 通知master当前region正在与另一region聚合
12. MERGED:RegionServer 通知了master当前region已经被聚合
13. MERGING_NEW:当前region正在由两个region聚合中
状态图说明:
1. 棕色:Offline状态,一种特殊的短暂状态(在被closed后,opening 之前),或是一种terminal的状态(regions of disabled tables),亦或是初始状态(新创建的表的regions)
2. 浅绿色:online状态,可以处理请求
3. 淡蓝色:短暂瞬时的状态
4. 红色:失败状态,需要 OPS注意
5. 金色:regions的split/merge的关闭状态
6. 灰色:可能由于split/merge生成的regions的初始状态
转换状态说明:
1. Master 将一个region从OFFLINE状态移动到OPENING状态,并尝试将region assign到一个RegionServer。RegionServer可能还没有收到open region 的请求。Master 会重试向RegionServer发送 open region request的请求,直到RPC goes through或者master的到达重试次数上限。在RegionServer接收到open region request后,RegionServer开始opening region;
2. 如果master重试次数已满,则master会阻止RegionServer opening region,将reigon放入closing状态,并尝试close 它,即使此时RegionServer 正在开始 open the region
3. 在RegionServer 打开region后,它会继续尝试通知master,直到master将当前region改为OPEN状态并且通知RegionServer。此时region为open状态
4. 如果RegionServer无法打开region,它会通知master。Master将region移动到CLOSED状态并尝试将在另一个regionserver打开此region
5. 如果master无法open the region on any of a certain number of regions,它会将region移动到FAILED_OPEN 状态,并且不会有任何进一步的动作,直到从 HBase进行人工干预,或 server is dead
6. master将一个region从OPEN移动到CLOSING状态。维持当前region的RegionServer可能尚未收到close region的请求。Master会重试发送 close request,直到RPC goes through或master重试次数耗尽
7. 如果RegionServer为非online状态,或者抛出了NotServingRegionException的异常,master会将region移动到OFFLINE状态并且re-assign这个region到另一个RegionServer
8. 如果RegionServer为online状态,但是在master重试次数耗尽后仍无法reach 到此region。则master移动region到FAILED_CLOSE 状态,并且不会有任何进一步的动作,直到从 HBase进行人工干预,或 server is dead
9. 如果RegionServer收到close region的请求,它会close此region并通知master。Master移动此region到CLOSED状态并重新将它分配到另一个RegionServer
10. 在assinging一个region之前,如果它是CLOSED状态,则master自动将region移动到OFFLINE状态
11. 当一个RegionServer开始要做split region时,它会通知master。Master将被split的region从OPEN状态移动到SPLITTING状态,并且新增加两个region到RegionServer。这两个新region在最开始会处于SPLITING_NEW 状态
12. 在通知了master后,RegionServer开始split region。一旦过了无法返回的点后(past the point of no return),RegionServer再次通知master,这样master会更新hbase:meta 表。然而,master不会更新region 状态直到它被server通知 split已经完成。如果split成功,则splitting region 会被从SPLITTING状态移动到SPLIT状态,并且两个新region会被从SPLITTING_NEW状态移动到OPEN状态
13. 如果split失败,splitting region会从SPLITTING移动回OPEN状态,并且两个新的region会从SPLITTING_NEW 移动到OFFLINE状态
14. 当一个RegionServer准备开始聚合两个region时,它首先会通知master。Master移动两个即将被聚合的regions从OPEN状态移动到MERGING状态,并且将(被聚合的,保有聚合的region的数据的)新region加入到RegionServer。新的regions的状态在最开始为MERGING_NEW的状态
15. 在通知master后,RegionServer开始聚合两个regions。一旦过了无法返回的点后(past the point of no return),则RegionServer再次通知master,这样master会更新META表。然后master不会立即更新region状态,直到RegionServer通知master 聚合已经完成。如果merge成功,则两个聚合的regions会被从MERGING状态移动到MERGED状态,并且新的region会被从MERGING_NEW 状态移动到OPEN状态
16. 如果merge 失败,则两个merging regions会从MERGING 状态移动回OPEN状态,并且新的region(创建出来hold 两个merging regions数据的region)会从MERGING_NEW状态移动到OFFLINE状态
17. 对处于FAILED_OPEN 或FAILED_CLOSE状态的regions,master会尝试再次关闭它们,当它们被重新分配时(通过HBase shell命令)
References:
http://hbase.apache.org/book.html
HBase Region 各个状态的转换的更多相关文章
- hbase region 分配方式
参与 Region 分配的重要对象 在 Region 分配过程中,起着重要作用有如下一些对象. HMaster— 是 HBase 中的 Master server ,仅有一个. HRegionServ ...
- 【原创】大叔问题定位分享(13)HBase Region频繁下线
问题现象:hive执行sql报错 select count(*) from test_hive_table; 报错 Error: java.io.IOException: org.apache.had ...
- Hbase Region Server整体架构
Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1. ...
- HBase Region Assign流程详解
Hbase是kv存储,但是逻辑上我们可以把存储在hbase上的kv数据当成表,rowkey可以认为是表的主键.为了便于分布式操作,hbase会把表横向切分成一块一块的数据,而每块就是一个Region. ...
- Java线程:线程状态的转换
Java线程:线程状态的转换 一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新状态:线程对象已 ...
- hibernate 三种状态的转换
一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...
- SSH框架之-hibernate 三种状态的转换
一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...
- java线程状态及转换
java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed w ...
- 【转】HBASE Region in Transition issue on Master UI
[From]https://community.hortonworks.com/content/supportkb/244808/hbase-region-in-transition-issue-on ...
随机推荐
- 用VsCode写Markdown
Markdown 基本语法 段落 非常自然,一行文字就是一个段落. 比如: 这是一个段落 会被解释成: <p>这是一个段落.</p> 如果你需要另起一段,请在两个段落之间隔一个 ...
- npm install的时候出现unexpected end of file错误提示时的解决办法
运行npm cache clean --force 清空npm缓存即可决这个问题 参考:https://blog.csdn.net/jingtian678/article/details/811876 ...
- 洛谷P3516 PRZ-Shift [POI2011] 构造
正解:构造 解题报告: 传送门! umm这题就是很思维的?就是想到了就A了想不到就做不出来,然而我也只能是做到理解不知道怎么想出来,,,感觉构造题什么的就很真诚,一点套路也没有,所以像我这种没有脑子只 ...
- spss缺失值填充步骤
缺失值填充是数据预处理最基本的步骤,一般能想到的是固定值填充(均值等统计学方法).根据与本列有相关关系的列函数表示来填充.这次我用的是em算法进行填充,具体原理后续补充. 主要记录一下步骤: 工具栏: ...
- vue-property-decorator 提供 OO 的风格 Vue Component 方便类型声明
@Prop 父子组件之间传值 Install: npm install --save vue-property-decorator Child: <template> <div&g ...
- 18.0-uC/OS-III挂起内核对象
任务等待多个对象.然而, uC/OS-III只允许同时等待多个信号量和消息队列.换句话说,不能同时等待多个事件标志组或mutex. 1.任务可以同时等待多个信号量和消息队列. 任务接收到一个信号量或消 ...
- WIN7搭建ASP站点
在WIN7配置IIS用于搭建ASP站点(非ASP.NET) ,仅安装.配置必要文件. 1.安装IIS管理工具,用于支持静态页面. 2.添加匿名访问权限. 搭建站点指定到特定文件夹,浏览静态页面会报如下 ...
- 关闭图形界面下普通用户关机重启命令- 7.x - CentOS
vim /etc/polkit-/rules.d/-inhibit-shutdown.rules polkit.addRule(function(action, subject) { if (acti ...
- iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)
iPhone屏蔽IOS更新.iPhone系统更新的提示(免越狱,有效期更新至2021年) 1.在Safari浏览器中粘贴如下链接,按提示打开链接. 输入http://apt.dataage.pub 2 ...
- c++赋值构造函数为什么返回引用类型?
目录 0 前言 1 内置类型 2 自定义类型 3 结论 4 源码 0. 前言 c++默认赋值构造函数的返回值是引用类型,c++赋值运算符=的本意是返回左值的引用,我们重载赋值构造函数的时候,返回值是否 ...