RRegionServer Splitting 实现过程详解大数据
1、RegionServer决定本地的region分裂,并准备分裂工作。第一步是,在zookeeper的/hbase/region-in-reansition/region-name下创建一个znode,并设为SPLITTING状态。
2、Master通过父region-in-transition znode的watcher监测到刚刚创建的znode。
3、RegionServer在HDFS中父region的目录下创建名为“.split”的子目录。
4、RegionServer关闭父region,并强制刷新缓存内的数据,之后在本地数据结构中将标识为下线状态。此时来自Client的对父region的请求会抛出NotServingRegionException ,Client将重新尝试向其他的region发送请求。
5、RegionServer在.split目录下为子regionA和B创建目录和相关的数据结构。然后RegionServer分割store文件,这种分割是指,为父region的每个store文件创建两个Reference文件。这些Reference文件将指向父region中的文件。
6、RegionServer在HDFS中创建实际的region目录,并移动每个子region的Reference文件。
7、RegionServer向.META.表发送Put请求,并在.META.中将父region改为下线状态,添加子region的信息。此时表中并单独存储没有子region信息的条目。Client扫描.META.时回看到父region为分裂状态,但直到子region信息出现在表中,Client才直到他们的存在。如果Put请求成功,那么父region将被有效地分割。如果在这条RPC成功之前RegionServer死掉了,那么Master和打开region的下一个RegionServer会清理关于该region分裂的脏状态。在.META.更新之后,region的分裂将被Master回滚到之前的状态。
8、RegionServer打开子region,并行地接受写请求。
9、RegionServer将子region A和B的相关信息写入.META.。此后,Client便可以扫描到新的region,并且可以向其发送请求。Client会在本地缓存.META.的条目,但当她们向RegionServer或.META.发送请求时,这些缓存便无效了,他们竟重新学习.META.中新region的信息。
10、RegionServer将zookeeper中的znode /hbase/region-in-transition/region-name更改为SPLIT状态,以便Master可以监测到。如果子Region被选中了,Balancer可以自由地将子region分派到其他RegionServer上。
11、分裂之后,元数据和HDFS中依然包含着指向父region的Reference文件。这些Reference文件将在子region发生紧缩操作重写数据文件时被删除掉。Master的垃圾回收工会周期性地检测是否还有指向父region的Reference,如果没有,将删除父region。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/9565.html
分布式文件系统,分布式数据库区块链并行处理(MPP)数据库,数据挖掘开源大数据平台数据中台数据分析数据开发数据治理数据湖数据采集相关文章
- Redis数据过期策略的实现详解
- 基于java实现mongodb的数据库连接池详解大数据
- sparkmlib使用Pipeline实现简单的逻辑回归详解大数据
- LDA主题模型的java代码实现详解大数据
- zookeeper适用场景:分布式锁实现详解大数据
- Redis详解(五)—— redis的五大数据类型实现原理大数据
- 实现HDFS数据上传和下载代码详解编程语言
- Vue数据双向绑定原理及简单实现详解编程语言
- MySQL触发器:实现数据自动化的利器(mysql触发器in)
- mongodb 分片备份:实现数据的安全储存(mongodb分片备份)
- Java实现Redis数据过期管理(redisjava过期)
- 数据定时清理Redis中Java实现定时清理过期数据(redisjava过期)
- 策略Java中使用Redis实现数据过期策略(redisjava过期)
- 数据库Odoo使用MSSQL数据库:实现数据多元管理(Odoo使用mssql)
- MySQL缓存详解如何在MySQL中实现高效的数据缓存(mysql中做缓存)
- Oracle数据库元数据控制权限实现方法(oracle 元数据权限)
- App与MySQL的通信实现数据交互的新方式(app和mysql通信)
- MySQL实现数据去重去除重复数据的方法详解(mysql中去重语句)
- MySQL实现一次性跨多表更新数据,详解操作方法(mysql 一次更新多表)
- 从SQL到Redis实现灵活高效的数据访问(sql访问redis数据)
- 设置Redis读写权重,实现有效数据访问(redis配置读写权重)
- Oracle数据库百万级优化实现一亿条数据高效处理(oracle一亿数据优化)
- asp.net数据绑定的实例代码
- php和jquery实现地图区域数据统计展示数据示例