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 ...
随机推荐
- linux文件系统变为只读解决
linux控制台显示文件系统变为只读,需输密码或者按ctrl+d结束 输入root密码后执行fsck -y /dev/sda1,fsck -y /dev/sda2和fsck -y /dev/sda3等 ...
- Python idle运行代码出现'ascii' codec can't encode characters in position 0-2
编码问题,采用一种方法: Python代码 ,开头加: import sys reload(sys) sys.setdefaultencoding('utf8') 在idle中运行后没错误,但是不显示 ...
- Git命令行基本操作
Git--- download网址:https://git-scm.com/downloads 0. 安装Git 网上有很多Git安装教程,如果需要图形界面,windows下建议使用TortoiseG ...
- 关于maven-resources-plugin配置的隐藏的坑
昨天发现一个问题, 一个第三方证书的文件存放于resources文件夹下,在本地环境使用该证书进行加密调用第三方接口,没有任何问题,但是发布到测试环境和生产环境(linux)报错,提示证书工厂无法初始 ...
- Kafka— —副本(均衡负载)
创建一个副本数为3的topic Now create a new topic with a replication factor of three: > bin/kafka-topics.sh ...
- GlusterFS配置及使用
一.GlusterFS 配置及使用 GlusterFS配置及使用:https://www.cnblogs.com/sxchengchen/p/7805667.html 二.CentOS 7 安装部署 ...
- 【转】python虚拟环境--virtualenv
virtualenv 是一个创建隔绝的Python环境的工具.virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包. 安装 pip install virtu ...
- Spring Boot IoC 容器初始化过程
1. 加载 ApplicationContextInializer & ApplicationListener 2. 初始化环境 ConfigurableEnvironment & 加 ...
- Axis2的简单配置(完整版)
Axis2的简单配置(终结版) 1.axis2 下载地址 axis2-1.6.2-bin.zip http://mirror.esocc.com/apache//axis/axis2/java/cor ...
- app 开发
移动APP开发 ios Android 中国人写的 MUI 布局框架 HTML5plus 硬件驱动调用(打开摄像头,闪光灯,震动) 和 系统调用(打开相册,通讯录,message) http:/ ...