Hbase学习笔记(四)——存储的三个机制(Flush、Compact、Split)

Hbase——存储的三个机制

  • 一、Flush
  • 二、Compact
  • 三、Split

一、Flush

当MemStore中的数据量达到阈值,就将数据Flush到HDFS中,以Storefile形式存储。

  • 触发条件
  1. 当某个store中的memstore的存储达到 128M

    hbase.hregion.memstore.flush.size = 134217728

  2. 当整个region所使用的Memstore的内存大小达到阈值

    hbase.regionserver.global.memstore.upperLimit = 0.4
    这个参数的作用是当单个HRegion内所有的Memstore大小总和超过指定值时,flush该HRegion的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。

    hbase.regionserver.global.memstore.lowerLimit = 0.38
    当MemStore使用内存总量达到hbase.regionserver.global.memstore.lowerLimit指定值时,将会有多个MemStores flush到文件中,MemStore flush 顺序是按照大小降序执行的,直到刷新到MemStore使用内存略小于lowerLimit

  • Tips:在工作中需要关闭自动flush,如果自动触发会影响正在运行的其他业务

    解决:写脚本,手动flush
    1.将命令写入文件,一行一个,最后一个命令一定要是exit
    2.使用bin/hbase shell file_path

二、Compact

http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.14.0/book.html#compaction

把小的storeFile文件合并成大的Storefile文件。
清理过期的数据,包括删除的数据
将数据的版本号保存为3个

  • minor Compact:将最早最小5个文件进行合并,生成一个较大的文件
  • major Compact:将整个store中所有的storefile进行合并,合并过程中删除被标记为删除的数据
  • 触发条件
    • major:hbase.hregion.majorcompaction= 7 天
  • Tips:关闭自动major compact,将该属性的值设置为0,手动进行合并(major_compact)。

三、Split

当某个region中总的Storefile大小达到阈值,就会触发,等分为两个新的region

  • 触发条件

    hbase.hregion.max.filesize = 10GB

  • Tips:不能让它自动切分,将该值设大一点,手动进行分割。

你可能感兴趣的:(Hbase)