1. 程式人生 > >hbase的讀寫機制詳解,及flush引數的配置詳解

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)cli​​ent向這臺regionserver伺服器發起訪問請求(-meta-)
       3)客戶端從元表的rgion獲取到使用者表資訊(區域,所在RegionServer的,rowkey起始範圍),向對應的RegionServer的伺服器發起資料訪問請求

4)這臺RegionServer的伺服器接收到資料請求訪問並響應資料給客戶端1.2 ,寫資料流程[create put delete] 1)客戶端訪問zookeeper叢集,獲取meta表位置,並確定當前寫入資料屬於哪個區域(rowkey),並確定regio對應的regionserver 2)cli​​ent向這臺regionserver伺服器發起寫入資料請求3)區域伺服器接收請求,並響應寫入4)先寫入WAL(Hlog),再寫入memstore(記憶體)5)當memstore資料達到閥值會沖洗進磁碟形成一個storefile檔案(128M) --flush 6)小檔案storefile合併成為一個大的storefile文
件    --compact 7)當storefile大小超過10G(預設值)時,會進行split ---拆分   










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 </源>

</屬性>