hbck源码系列(四)--表的完整性检查和修复Check
一,完整性检查
1检查表在HDFS的完整性
二.checkRegionChain方法
完整性检查,主要检查工作在checkRegionChain方法,该方法主要两个作用:
1.根据检查条件,检查异常
2.根据检查条件,修复异常
检查条件和异常都指什么?
2.1 异常
@Overridepublic void handleRegionStartKeyNotEmpty(HbckInfo hi) throws IOException{errors.reportError(ERROR_CODE.FIRST_REGION_STARTKEY_NOT_EMPTY,"First region should start with an empty key. You need to "+ " create a new region and regioninfo in HDFS to plug the hole.",getTableInfo(), hi);}@Overridepublic void handleRegionEndKeyNotEmpty(byte[] curEndKey) throws IOException {errors.reportError(ERROR_CODE.LAST_REGION_ENDKEY_NOT_EMPTY,"Last region should end with an empty key. You need to "+ "create a new region and regioninfo in HDFS to plug the hole.", getTableInfo());}@Overridepublic void handleDegenerateRegion(HbckInfo hi) throws IOException{errors.reportError(ERROR_CODE.DEGENERATE_REGION,"Region has the same start and end key.", getTableInfo(), hi);}@Overridepublic void handleDuplicateStartKeys(HbckInfo r1, HbckInfo r2) throws IOException{byte[] key = r1.getStartKey();// dup start keyerrors.reportError(ERROR_CODE.DUPE_STARTKEYS,"Multiple regions have the same startkey: "+ Bytes.toStringBinary(key), getTableInfo(), r1);errors.reportError(ERROR_CODE.DUPE_STARTKEYS,"Multiple regions have the same startkey: "+ Bytes.toStringBinary(key), getTableInfo(), r2);}@Overridepublic void handleSplit(HbckInfo r1, HbckInfo r2) throws IOException{byte[] key = r1.getStartKey();// dup start keyerrors.reportError(ERROR_CODE.DUPE_ENDKEYS,"Multiple regions have the same regionID: "+ Bytes.toStringBinary(key), getTableInfo(), r1);errors.reportError(ERROR_CODE.DUPE_ENDKEYS,"Multiple regions have the same regionID: "+ Bytes.toStringBinary(key), getTableInfo(), r2);}@Overridepublic void handleOverlapInRegionChain(HbckInfo hi1, HbckInfo hi2) throws IOException{errors.reportError(ERROR_CODE.OVERLAP_IN_REGION_CHAIN,"There is an overlap in the region chain.",getTableInfo(), hi1, hi2);}@Overridepublic void handleHoleInRegionChain(byte[] holeStart, byte[] holeStop) throws IOException{errors.reportError(ERROR_CODE.HOLE_IN_REGION_CHAIN,"There is a hole in the region chain between "+ Bytes.toStringBinary(holeStart) + " and "+ Bytes.toStringBinary(holeStop)+ ". You need to create a new .regioninfo and region "+ "dir in hdfs to plug the hole.");}
};
2.2检查条件
之前说过表的完整性检查主要是检查表的hole、overlap和orphan等情况,检查条件是判断上述异常的依据,在源码中的判断依据是什么,这里根据不同的情况,描述不同的检查条件,详见各个章节。
- hole
- orphan
- overlap
- others
hbck源码系列(四)--表的完整性检查和修复Check相关推荐
- 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)...
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...
- 源码解读_入口开始解读Vue源码系列(二)——new Vue 的故事
作者:muwoo 转发链接:https://github.com/muwoo/blogs/blob/master/src/Vue/2.md 目录 入口开始解读Vue源码系列(一)--造物创世 入口开始 ...
- [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
文章来自:http://www.hoohack.me/2016/02/15/understanding-phps-internal-array-implementation-ch 原文:https:/ ...
- c++ map 获取key列表_好未来Golang源码系列一:Map实现原理分析
分享老师:学而思网校 郭雨田 一.map的结构与设计原理 golang中map是一个kv对集合.底层使用hash table,用链表来解决冲突 ,出现冲突时,不是每一个key都申请一个结构通过链表串起 ...
- mybatis 源码系列(七) Java基础之数据库事务隔离级别
更多mybatis 源码系列文章可关注我的博客,点击前往 正确设置数据库的事务访问级别,有助于我们的应用程序达到预期的效果 在mybatis中,提供了事务隔离级别的枚举类:org.apache.iba ...
- 【投屏】Scrcpy源码分析四(最终章 - Server篇)
Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...
- 修改gh-ost源码实现两表在线高速复制
修改gh-ost源码实现两表在线高速复制 一.问题起源 笔者所在的公司的需要对核心业务表tb_doc 进行表分区,目前该表的记录数为190,522,155. 由于该表没有分区,新增分区需要创建影子表, ...
- Spring读源码系列之AOP--03---aop底层基础类学习
Spring读源码系列之AOP--03---aop底层基础类学习 引子 Spring AOP常用类解释 AopInfrastructureBean---免被AOP代理的标记接口 ProxyConfig ...
- [darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建
[darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建 FesianXu 20201120 at UESTC 前言 笔者在[1,2]中已经对darknet如何进行配置 ...
最新文章
- 2018-4-17论文《狼群算法的研究与应用》笔记2 :高维复杂单目标连续优化问题的改进狼群算法
- 复旦大学邱锡鹏教授等「Transformers全面综述」论文
- python3 sleep 并发_Python3并发写文件与Python对比
- 打印容器_化妆品行业是如何通过3D打印来定制开发产品的?
- 移植MT76x8 私有WIFI驱动V4.1.0.0到Openwrt 18.06所遇到的坑
- SAP Leonardo机器学习如何获取模型存储的实际地址
- 微信开发中,H5的video标签使用
- python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...
- C#通过修改注册表改变IE默认选项
- scala入门-07特质类(trait)的使用
- The name Foxit Software sounds familiar
- 字节流和字符流的读写
- i3-9100f和i5-9400f 的区别
- 计算机辅助设计cad实训总结,CAD画图的心得体会
- 哔哩哔哩视频下载助手
- 大数据、数据挖掘和机器学习,带了哪些业务价值?
- 555定时器原理及应用(报告)
- KeilC51基本关键字
- Java的JDK在哪里下载,如何下载?
- HTML5实现音频和视频嵌入,如何利用HTML5实现音频和视频嵌入的方法