hbase compaction 简单介绍

原创
2017/03/31 14:53
阅读数 70
              
   

   简单说一下hbase表的存储:一个表中的数据存储到regionserver上,regionserver会管理实际存储表的数据的region,每个region上每一个columnfamily会有一个Memstore。
   当memstore 达到了hbase.hregion.memstore.flush.size限制的值,memstore会将它的内容flush到StoreFile(HFile)。这样,一个Store中的StoreFile数量将会增长,Compaction 是一个操作,通过merge,将会减少一个Store中的StoreFile的数量,从而提高读操作的性能。Compaction是资源密集型操作,将提高或者影响性能,取决于很多因素。
Compaction有两种策略,minor compaction和major compaction。
minor compaction选取一些小的,临近的StoreFile,将它们重写为一个大的StoreFile。出于性能考虑的原因,minor compaction不会删除过期的或者标记要删除的数据。minor compaction的结果是在一个Store中导致更少,更大的SotreFile。

   major compaction的结果是每个Store 生成一个StoreFile。同时在生成的过程中会删除已经标记要删除的数据。major compaction理论上会提高性能。然而,在一个高负载的系统中,major compaction会导致一些不利的影响。默认配置下,major compaction将会每7天执行一次。因此,对于大多数的线上系统,管理员可以选择在系统空闲时手动执行major compaction,以降低对业务的影响。

  参数:
  
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value> <!--128MB-->
</property>
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value> <!-- 7days-->
</property>

  
    将hbase.hregion.majorcompaction参数的时间设置为0就可以禁用major compaction。改为在系统负载低的时候在hbase shell中执行 major_compaction '表名'。

   
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部