HBase之Region Compact流程分析
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流程分析相关推荐
- HBase源码分析之HRegion上compact流程分析(三)
在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...
- HBase之Region上Spilt流程分析
我们知道在MemStore达到阀值以后,会进行flushRegion操作. 那么在操作完成之后,会对HRegion进行检查,看是否HRegion是否已经达到阀值,如果已经达到阀值,则需要对HRegio ...
- HBase解决Region Server Compact过程占用大量网络出口带宽的问题
为什么80%的码农都做不了架构师?>>> HBase 0.92版本之后,RegionServer的Compact过程根据待合并的文件大小分为smallcompaction和la ...
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- hbase实践之写流程拾遗
keyvalue KeyValue中包含了丰富的自我描述信息: KeyValue是支撑"稀疏矩阵"设计的一个关键点:一些Key相同的任意数量的独立KeyValue就可以构成一行数据 ...
- Android SDCard UnMounted 流程分析(三)
前篇地址 Android SDCard UnMounted 流程分析(一) Android SDCard UnMounted 流程分析(二) 前一篇讲到SDCard unmout onEvent 发送 ...
- apache hbase的region 分割与合并
原文地址:APACHE HBASE REGION SPLITTING AND MERGING 本文我们将深入探讨hbase的核心领域之一:region分割与合并. 具体来说,我们将详细讨论hbase ...
- 基于IMX6Q的uboot启动流程分析(3):_main函数之relocate_code与board_init_r
基于IMX6Q的uboot启动流程分析(1):uboot入口函数 基于IMX6Q的uboot启动流程分析(2):_main函数之board_init_f 基于IMX6Q的uboot启动流程分析(3): ...
- android加载efi分区,高通Android UEFI XBL 代码流程分析
高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...
最新文章
- 基于R的混合线性模型的实现
- PHPStorm2016如何安装主题
- struts.xml 文件添加DTD文件
- crontab -e
- struts2和springmvc实现文件上传
- poj 1338 Ugly Numbers(丑数模拟)
- Docker安装(安装docker)
- 第五章、使用复合赋值和循环语句
- java里frame颜色_如何为Java中的窗口(JFrame)添加颜色
- Python代码编辑器jupyter的安装
- 各种时频分析方法-不定期更新
- ps快速制作全屏水印
- 给远程Windows重装一个Windows
- 2023年前端面试题集锦
- 专访丨兼容国内外市场的代码分析软件,鉴释科技帮助企业减少bug发生率
- 软件工程 系统测试概述
- 深入分析ClassLoader
- Docker容器---dockerfile简介
- oracle中那个日期怎么相减_oracle日期时间加减规则
- DMA基金会加速,5G应用
热门文章
- 交流信号叠加直流偏置_接收无线电信号利器,一款无线有源环形收音机接收天线放大器...
- python数据分析是什么意思_选择python进行数据分析的理由和优势
- abp执行mysql语句_在ABP模板工程中使用MySql
- drools规则中调用其它规则_Makefile文件中包含哪些规则?
- 003redis事务特性
- DCGAN baseline
- 常州工学院计算机毕业论文多少字,研究常州工学院毕业论文(设计)系统快速使用指南.doc...
- android 如何 查看内存使用详情,android 查看内存使用情况
- android 7.0电视,将智能电视升级到Android 7.0有什么经验?为索尼用户祝福
- pytorch搭建TextRCNN模型与使用案例