hbase的讀寫機制詳解,及flush引數的配置詳解
1,HBase的的讀寫流程圖,是一個二次定址的過程
第一次直接到動物園管理員中找到元的元資料資訊,即元對應的儲存其他所有使用者表的RegionServer的的位置,示意圖中所給出的為regionserver1,然後第二次直接到regionserver1中的meta.region查詢對應的{namespace:table,rowkey,column_family,column}的位置,這個具體的region根據start key和end key和自身的rowkey來決定,最後在Hmaster的排程下,Hregionserver(示意圖中的regionserver2)執行最後的更新或插入操作
插入一個插曲,就是官方對空鍵的解釋
翻譯下來為:空鍵用於表示表開始和表結束。具有空開始的區域是表中的第一個區域。如果一個區域有一個空的開始鍵和一個空的結束鍵,它是表中唯一的區域,所以每一個rowkey都能找到自己唯一的區域,進行資料操作。
總結如下
1.1,讀資料流程[scan get]
1)客戶端訪問zookeeper叢集,zookeeper叢集儲存了meta的位置,獲取meta被哪臺伺服器管理
2)client向這臺regionserver伺服器發起訪問請求(-meta-)
3)客戶端從元表的rgion獲取到使用者表資訊(區域,所在RegionServer的,rowkey起始範圍),向對應的RegionServer的伺服器發起資料訪問請求
2,HBASE的相關引數設定
##flush機制
<!--當memstore的大小超過這個值的時候,會flush到磁碟,預設為128M -->
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<!--一臺伺服器regionserver所有memstore總容量(Max Heap=983.4 M)(eg:100個region)達到40%就強制flush -->
<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>
max heap 在hbase-env.sh 中進行設定,預設為1000M
## compacion機制
<! - 當小的storefile檔案達到這個值,就會合併成大的storefile,因為同一個rowkey會始終合併成一個storefile - >
<property>
<name> hbase.hstore.compactionThreshold < / name>
<value> 3 </ value>
<source> hbase-default.xml </ source>
</ property>
<! - 一個Region中的所有HStoreFile的主要壓縮的時間間隔。預設是1天。設定為0就是禁用這個功能 - >
<property>
<name> hbase.hregion.majorcompaction </ name>
<value> 86400000 </ value>
<source> hbase-default.xml
</ source> </ property>
## split機制
在工具組的命令中,可以對資料進行手動的flush,compact,split操作
組名:tools
命令:assign,balance_switch,balancer,catalogjanitor_enabled,catalogjanitor_run,catalogjanitor_switch,close_region,compact,flush,hlog_roll,major_compact,merge_region,move,split,trace,unassign,zk_dump
<! - 最大HFile大小。如果一個區域的HFiles的大小並且超過此值,則該區域被分割為兩個.->
<property>
<name> hbase.hregion.max.filesize </ name>
<value> 10737418240 </ value>
<source> hbase-default。 XML </源>
</屬性>