您的位置:首页 > 运维架构 > 网站架构

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,一般选择在业务峰值低的时候执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐