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 ...
随机推荐
- 【立体几何】Journey to Jupiter Gym - 101991J 立体几何模板
https://cn.vjudge.net/problem/Gym-101991J 题目很长,其实就是给你一个正三角形,并且告诉你它的中点在Z轴上以及法向量,边长和顶点A的坐标(自由度已定),让你求A ...
- Cesium 实践
详细内容请参考教程:https://www.jianshu.com/p/31c3b55a21eb 该教程翻译自官方英文教程,对入门cesium 帮助很大. 2,Cesium项目实例 实践: 问题 ...
- post方式接口测试(一)_新建测试用例
第一种方式:拷贝别人的 第二种方式:自己创建 二.打开浏览器(此处chrome),F12打开开发模式,输入网址登录,此时可获取到登录的 Request URL 二.打开postman,进入自己的Col ...
- js之prototype 原型对象
原型对象prototype可以这么理解,是该类的实例对象的模板,每个实例对象都是先复制一份该类的prototype,通过这个可以让类的实例拥有相同的功能 String.prototype.say= ...
- Spring中bean标签的属性和值:
Spring中bean标签的属性和值: <bean name="user" class="com.pojo.User" init-method=" ...
- How do you explain Machine Learning and Data Mining to non Computer Science people?
How do you explain Machine Learning and Data Mining to non Computer Science people? Pararth Shah, ...
- 创建多线程的第一种方式——创建Thread子类和重写run方法
创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...
- firefox 实现web交互机器人
现在仅有火狐浏览器可以这样操作 -- Filefox 下面是项目目录 -- 前端页面 -- html <!DOCTYPE html> <html lang="en" ...
- Jquery回到顶部效果
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- expect拷贝文件例子
----安装expectcd /tmp wget http://core.tcl.tk/tcl/zip/release/tcl.zipwget https://jaist.dl.sourceforge ...