HBase的架构和原理(四)--MemStore的Flush动作和HFile的Compaction机制
2020-07-14 06:13
537 查看
MemStore的描述
- 一个HRegion的一个Column Family对应一个HStore实例,每个HStore中都有一个MemStore,0个或多个StoreFile组成
- 在MemStore中,数据的排列顺序以RowKey、Column Family、Column的顺序以及Timestamp的倒序。和HFile中数据的排列顺序一样。
- 有以下三种情况可以触发MemStore的Flush动作
① 当一个HRegion中的MemStore的大小超过了:hbase.hregion.memstore.flush.size的大小,默认128MB,此时当前的MemStore会Flush到HFile中
② 当RS服务器上所有的MemStore的大小超过了:hbase.regionserver.global.memstore.upperLimit的大小,默认35%的内存使用量,此时当前HRegionServer中所有HRegion中的MemStore可能都会Flush。一般从最大的Memostore开始flush
③ 当前HRegionServer中WAL的大小超过了 1GB。hbase.regionserver.hlog.blocksize(32MB) * hbase.regionserver.max.logs(32)的数量,当前HRegionServer中所有HRegion中的MemStore都会Flush,这里指的是两个参数相乘的大小 - MemStore Flush过程中,还会在尾部追加一些meta数据,其中就包括Flush时最大的WAL sequence值,以告诉HBase这个StoreFile写入的最新数据的序列,Recover时就知道从哪里开始。在HRegion启动时,这个sequence会被读取,并取最大的作为下一次更新时的起始sequence
HFile文件合并机制
HBase采用Compaction机制来解决HFile文件过多的问题。在HBase中Compaction分为两种:Minor Compaction和Major Compaction
- Minor Compaction是指选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,在这个过程中不会处理已经Deleted或Expired的Cell。一次Minor Compaction的结果是减少Store File的数量但是产生更大的StoreFile
- Major Compaction是指将所有的StoreFile合并成一个StoreFile,在这个过程中,标记为Deleted的Cell会被删除,而那些已经Expired的Cell会被丢弃,那些已经超过最多版本数的Cell会被丢弃。一次Major Compaction的结果是一个HStore只有一个StoreFile存在。Major Compaction可以手动或自动触发,然而由于它会引起很多的I/O操作而引起性能问题,因而它一般会被安排在周末、凌晨等集群比较闲的时间
- 实现Compaction的方式有2种:
① 通过API:
// minor compact
admin.compact(“tab2”.getBytes());
// major compact
admin.majorCompact(“tab2”.getBytes());
② 通过指令:
compact(‘tab2’) # minor compact
major_compact(‘tab2’) # major compact
Hbase默认用的是Minor compaction。之所以默认不用Major Compaction的原因是在于,Major Compaction可能会占用大量的磁盘I/O,从而阻塞Hbase其他的读写操作。所以对于Major Compactoin,一般选择在业务峰值低的时候执行
相关文章推荐
- hbase架构原理之region、memstore、hfile、hlog、columm-family、colum、cell
- HBase1.2.3版本memstore flush触发机制以及HRegionServer级别触发源码分析
- HBase架构、读写数据流程、MemStore刷写时机、StoreFile Compaction合并、Region Split
- HBase源码分析之MemStore的flush发起时机、判断条件等详情
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用【转】
- HBase Memstore flush代码阅读笔记-2-由单个 memstore大小超过限制触发的 flush
- HBase的Hmaster、HRegionserver、Region、Hstore、memstore、HFile的关系
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用
- HBase底层原理(系统架构、表数据模型、物理存储、读写过程、Region管理、Master工作机制)
- HBase源码分析之HRegionServer上MemStore的flush处理流程(二)
- Hbase之MemStore的Flush
- HBase Memstore flush代码阅读笔记-1 -由 lowerlimit 和 upperlimit 触发的 flush
- hbase 源代码分析 (13) memStore flush to HFile
- HBase中的Memstore,HFile和KeyValue类
- HBase Memstore Flush
- HBase的Hmaster,HRegionsever,Region,Hstore,memstore,Hfile的关系
- HBase源码分析之HRegionServer上MemStore的flush处理流程(一)
- HBase源码分析之MemStore的flush发起时机、判断条件等详情(二)