1. 程式人生 > >HBase(3):內部機制flush & compact & split

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>