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 各个状态的转换的更多相关文章

  1. hbase region 分配方式

    参与 Region 分配的重要对象 在 Region 分配过程中,起着重要作用有如下一些对象. HMaster— 是 HBase 中的 Master server ,仅有一个. HRegionServ ...

  2. 【原创】大叔问题定位分享(13)HBase Region频繁下线

    问题现象:hive执行sql报错 select count(*) from test_hive_table; 报错 Error: java.io.IOException: org.apache.had ...

  3. Hbase Region Server整体架构

    Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1.    ...

  4. HBase Region Assign流程详解

    Hbase是kv存储,但是逻辑上我们可以把存储在hbase上的kv数据当成表,rowkey可以认为是表的主键.为了便于分布式操作,hbase会把表横向切分成一块一块的数据,而每块就是一个Region. ...

  5. Java线程:线程状态的转换

    Java线程:线程状态的转换   一.线程状态   线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下:   1.新状态:线程对象已 ...

  6. hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  7. SSH框架之-hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  8. java线程状态及转换

    java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed w ...

  9. 【转】HBASE Region in Transition issue on Master UI

    [From]https://community.hortonworks.com/content/supportkb/244808/hbase-region-in-transition-issue-on ...

随机推荐

  1. 使用FreeMarker生成word文档

    生成word文档的框架比较多,比如poi,java2word,itext和freemarker. 调研之后,freemarker来实现挺简单的,具体步骤如下: 1. 新建word文档,占位符用${}, ...

  2. vue里面的v-for列表循环

    列表渲染 v-for v-for可以把数据中的一个数组对应为一组元素v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名. ...

  3. awt多线程聊天

    public class ChatServer { boolean started = false; ServerSocket serverSocket = null; public void sta ...

  4. python 发送无附件邮件

    import smtplibimport tracebackfrom email.mime.text import MIMETextfrom config.config import *        ...

  5. TP框架中分页类的使用

    public function test(){ $m=M('Message'); import('ORG.Util.Page');// 导入分页类 $count = $m->count();// ...

  6. [js]面向对象1

    数据赋值拷贝 1,值得赋值是独立的 num1=12; num1=num2 将存储值赋值一份存储. 2, var age=22; age2=age; age=24 console.log(age); a ...

  7. python 对反斜杠的处理问题

    首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Wi ...

  8. [CSS] Frequently used method or solutions for issues

    Stick button in right side in html Solution: //In the html <div class="float__button" & ...

  9. cocos2dx JS layuot纯代码实现背景颜色渐变

    // view._partyBtnClassify.setBackGroundColorType(ccui.Layout.BG_COLOR_GRADIENT);// view._partyBtnCla ...

  10. 为archlinux终端ls不同类型文件设置不同显示颜色

    title: 为archlinux终端ls不同类型文件设置不同显示颜色 date: 2017-11-13 20:53:55 tags: linux categories: linux archlinu ...