一、Flush
当MemStore中的数据量达到阈值,就将数据Flush到HDFS中,以Storefile形式存储。
- 触发条件:
-
当某个store中的memstore的存储达到 128M
hbase.hregion.memstore.flush.size
= 134217728 -
当整个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:不能让它自动切分,将该值设大一点,手动进行分割。