HBase(3):内部机制flush & compact & split

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>

猜你喜欢

转载自blog.csdn.net/u010886217/article/details/84575640