1.实现功能
当向hbase数据库中存储数据的时候,实际存储过程是有三个阶段:flush & compact & split。
2.分步说明
(1)flush
Client写入 -> 存入MemStore,一直到MemStore满(Hlog)-> Flush成一个StoreFile存储在HDFS上
(2)compact
StoreFile,直至增长到一定阈值 -> 触发Compact合并操作 -> 多个StoreFile合并成一个StoreFile
(3)split
单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region
HMaster分配到相应的HRegionServer上
3.hbase-default.xml中相关参数
Flush:
<!--当memstore的大小超过这个值的时候,会flush到磁盘。128M-->
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<!--单个regionserver的全部memstore的最大值。超过这个值总容量(Max Heap=983.4 M)*0.4,
一个新的put插入操作会被挂起,强制执行flush操作。 -->
<property>
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.4</value>
</property>
<!--当强制执行flush操作的时候,当低于这个值的时候,flush会停止。默认是堆大小的 35% . -->
<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.35</value>
</property>
Compact:
<!--当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作,把这HStoreFiles写成一个-->
<property>
<name>hbase.hstore.compactionThreshold</name>
<value>3</value>
</property>
<!--一个Region中的所有HStoreFile的major compactions的时间间隔。默认是1天。-->
<property>
<name>hbase.hregion.majorcompaction</name>
<value>86400000</value>
</property>
Split:
<!--最大HStoreFile大小。若某个列族的HStoreFile增长达到这个值,这个Hegion会被切割成两个。 默认: 10G.-->
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
</property>