Compact(合并):是指在HBase中,HRegion上某一个列簇部分或者全部Store File合并。是由于数据不断的被写入,MemStore达到阀值则会把数据flush到Store File持久化。这样样的话就有很多文件,越积越多会严重影响HBase的读取效率,所以HBase在满足一定条件获或者手动触发合并操作,讲很多文件合并成一个大文件

StoreEngine: 是一个能够为HStore操作创建对象的工厂。因为不是所有的compaction政策和store file manager等都兼容,所以将他们通过StoreEngine维系在一起

CompactionRequest: 这个类持有进行compaction操作具体的一些逻辑,或者说是对compact请求的封装

在HRegionServer启动运行的时候,会启动compactSplit线程,以用于split Region和 compact Region上 store files。

一  MemStoreFlush调用flushRegion之后,会根据返回的FlushResult判断是否应该进行compact 或者 split,流程如下:

1.1 boolean shouldCompact =flushResult.isCompactionNeeded(); 判断是否应该进行compact,如果不需要记性split,且需要进行compact,那么才会执行server.compactSplitThread.requestSystemCompaction

1.2 拿到HRegion上的所有store,遍历每一个store,创建Compaction

Request对象

1.3 每一个Store通过selectCompaction创建CompactionContext对象,具体在调用Store#requestCompactionl来创建CompactionContext对象

1.4 会删除一些不需要的文件,这些不需要的文件大都是到期的文件

1.5 根据CompactionPolicy的selectCompaction创建Compaction

Request对象:

首先:从传入的store下的store files中获取合格的store file。

然后:决定当前这个CompactionRequest是否是Major Compaction。

1.6 然后将CompactionRequest中选中的需要compact的文件添加到

filesCompacting

1.7 然后判断大多是compaction是small还是large,然后创建CompactRunner放入到不同longCompactions和shortCompactions线程池

1.8 CompactRunner然后调用HRegion的compact方法,开始真正的compact操作

二 HRegion的compact操作

2.1 首先应该判断HRegion是否下线,如果下线直接返回

2.3 调用store#compact方法,开始compact store file,这个方法可能需要耗费一些时间,所以这个调用线程必须长期阻塞

2.4 Store通过CompactContext获取该Store的CompactionRequest,并从CompactionRequest获取需要合并的文件

2.4 调用CompactContext#compact方法->DefaultCompactor/Stripe

Compactor,我们暂时不考虑StripeCompactor这种情况,使用DefaultCompactor来进行分析

2.4 获取到该store所有scanner中最小的read point,并且根据需要合并的文件    创建StoreFileScanners; 然后创建StoreScanner

2.5 调用performCompaction执行
# 创建一个空的Cell List

# 调用StoreScanner#next方法,将遍历到的Cell填充到Cell List中

# 遍历这个Cell List,然后通过Writer写入文件

# Writer写入文件会有文件路径,最后将这些文件的path添加到一个List,返回

2.6 如果compaction操作完成,就需要将文件移到正确地方,并创建StoreFile和Reader,返回StoreFile列表

2.7 调用writeCompactionWalRecord:在WAL中写入compaction的记录

2.8 调用replaceStoreFiles:

# 移除掉已经被合并的文件,然后将合并之后的文件添加到StoreFileManager

# 从正在合并的文件列表filesCompacting中移除掉已经被合并的文件

2.9 调用completeCompaction完成该Store的compact操作,这个时候Store将会对StoreScanner使用新的文件

HBase之Region Compact流程分析相关推荐

  1. HBase源码分析之HRegion上compact流程分析(三)

    在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...

  2. HBase之Region上Spilt流程分析

    我们知道在MemStore达到阀值以后,会进行flushRegion操作. 那么在操作完成之后,会对HRegion进行检查,看是否HRegion是否已经达到阀值,如果已经达到阀值,则需要对HRegio ...

  3. HBase解决Region Server Compact过程占用大量网络出口带宽的问题

    为什么80%的码农都做不了架构师?>>>    HBase 0.92版本之后,RegionServer的Compact过程根据待合并的文件大小分为smallcompaction和la ...

  4. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  5. hbase实践之写流程拾遗

    keyvalue KeyValue中包含了丰富的自我描述信息: KeyValue是支撑"稀疏矩阵"设计的一个关键点:一些Key相同的任意数量的独立KeyValue就可以构成一行数据 ...

  6. Android SDCard UnMounted 流程分析(三)

    前篇地址 Android SDCard UnMounted 流程分析(一) Android SDCard UnMounted 流程分析(二) 前一篇讲到SDCard unmout onEvent 发送 ...

  7. apache hbase的region 分割与合并

    原文地址:APACHE HBASE REGION SPLITTING AND MERGING  本文我们将深入探讨hbase的核心领域之一:region分割与合并. 具体来说,我们将详细讨论hbase ...

  8. 基于IMX6Q的uboot启动流程分析(3):_main函数之relocate_code与board_init_r

    基于IMX6Q的uboot启动流程分析(1):uboot入口函数 基于IMX6Q的uboot启动流程分析(2):_main函数之board_init_f 基于IMX6Q的uboot启动流程分析(3): ...

  9. android加载efi分区,高通Android UEFI XBL 代码流程分析

    高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...

最新文章

  1. 基于R的混合线性模型的实现
  2. PHPStorm2016如何安装主题
  3. struts.xml 文件添加DTD文件
  4. crontab -e
  5. struts2和springmvc实现文件上传
  6. poj 1338 Ugly Numbers(丑数模拟)
  7. Docker安装(安装docker)
  8. 第五章、使用复合赋值和循环语句
  9. java里frame颜色_如何为Java中的窗口(JFrame)添加颜色
  10. Python代码编辑器jupyter的安装
  11. 各种时频分析方法-不定期更新
  12. ps快速制作全屏水印
  13. 给远程Windows重装一个Windows
  14. 2023年前端面试题集锦
  15. 专访丨兼容国内外市场的代码分析软件,鉴释科技帮助企业减少bug发生率
  16. 软件工程 系统测试概述
  17. 深入分析ClassLoader
  18. Docker容器---dockerfile简介
  19. oracle中那个日期怎么相减_oracle日期时间加减规则
  20. DMA基金会加速,5G应用

热门文章

  1. 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
  2. python数据分析是什么意思_选择python进行数据分析的理由和优势
  3. abp执行mysql语句_在ABP模板工程中使用MySql
  4. drools规则中调用其它规则_Makefile文件中包含哪些规则?
  5. 003redis事务特性
  6. DCGAN baseline
  7. 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
  8. android 如何 查看内存使用详情,android 查看内存使用情况
  9. android 7.0电视,将智能电视升级到Android 7.0有什么经验?为索尼用户祝福
  10. pytorch搭建TextRCNN模型与使用案例