一,完整性检查

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相关推荐

  1. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)...

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  2. 源码解读_入口开始解读Vue源码系列(二)——new Vue 的故事

    作者:muwoo 转发链接:https://github.com/muwoo/blogs/blob/master/src/Vue/2.md 目录 入口开始解读Vue源码系列(一)--造物创世 入口开始 ...

  3. [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)

    文章来自:http://www.hoohack.me/2016/02/15/understanding-phps-internal-array-implementation-ch 原文:https:/ ...

  4. c++ map 获取key列表_好未来Golang源码系列一:Map实现原理分析

    分享老师:学而思网校 郭雨田 一.map的结构与设计原理 golang中map是一个kv对集合.底层使用hash table,用链表来解决冲突 ,出现冲突时,不是每一个key都申请一个结构通过链表串起 ...

  5. mybatis 源码系列(七) Java基础之数据库事务隔离级别

    更多mybatis 源码系列文章可关注我的博客,点击前往 正确设置数据库的事务访问级别,有助于我们的应用程序达到预期的效果 在mybatis中,提供了事务隔离级别的枚举类:org.apache.iba ...

  6. 【投屏】Scrcpy源码分析四(最终章 - Server篇)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  7. 修改gh-ost源码实现两表在线高速复制

    修改gh-ost源码实现两表在线高速复制 一.问题起源 笔者所在的公司的需要对核心业务表tb_doc 进行表分区,目前该表的记录数为190,522,155. 由于该表没有分区,新增分区需要创建影子表, ...

  8. Spring读源码系列之AOP--03---aop底层基础类学习

    Spring读源码系列之AOP--03---aop底层基础类学习 引子 Spring AOP常用类解释 AopInfrastructureBean---免被AOP代理的标记接口 ProxyConfig ...

  9. [darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建

    [darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建 FesianXu 20201120 at UESTC 前言 笔者在[1,2]中已经对darknet如何进行配置 ...

最新文章

  1. 2018-4-17论文《狼群算法的研究与应用》笔记2 :高维复杂单目标连续优化问题的改进狼群算法
  2. 复旦大学邱锡鹏教授等「Transformers全面综述」论文
  3. python3 sleep 并发_Python3并发写文件与Python对比
  4. 打印容器_化妆品行业是如何通过3D打印来定制开发产品的?
  5. 移植MT76x8 私有WIFI驱动V4.1.0.0到Openwrt 18.06所遇到的坑
  6. SAP Leonardo机器学习如何获取模型存储的实际地址
  7. 微信开发中,H5的video标签使用
  8. python字符串和List:索引值以 0 为开始值,-1 为从末尾的开始位置;值和位置的区别哦...
  9. C#通过修改注册表改变IE默认选项
  10. scala入门-07特质类(trait)的使用
  11. The name Foxit Software sounds familiar
  12. 字节流和字符流的读写
  13. i3-9100f和i5-9400f 的区别
  14. 计算机辅助设计cad实训总结,CAD画图的心得体会
  15. 哔哩哔哩视频下载助手
  16. 大数据、数据挖掘和机器学习,带了哪些业务价值?
  17. 555定时器原理及应用(报告)
  18. KeilC51基本关键字
  19. Java的JDK在哪里下载,如何下载?
  20. HTML5实现音频和视频嵌入,如何利用HTML5实现音频和视频嵌入的方法

热门文章

  1. 软件项目如何调研(二)
  2. 对iOS开发有用的一些自动化处理脚本
  3. 说说seo中的快速排名原理
  4. 发布 Libra Bug 悬赏项目
  5. 一大波 Facebook Libra 技术文章来袭
  6. laravel中的composer镜像地址
  7. 2022年国家高新技术企业认定最新规定及优惠政策重点介绍,补贴10-50万
  8. emacs ido mode 命令
  9. 玫瑰图制作|多种可视化工具集锦
  10. 202021 浏览器主页被劫持,无法修改默认网址