體系圖:
1.client向hregionserver傳送寫請求。
2.hregionserver將資料寫到hlog(write ahead log)。為了資料的持久化和恢復。
3.hregionserver將資料寫到記憶體(memstore)
4.反饋client寫成功。
1.當memstore資料達到閾值(預設是128m),將資料刷到硬碟,將記憶體中的資料刪除,同時刪除hlog中的歷史資料。
2.並將資料儲存到hdfs中。
3.在hlog中做標記點。
1.當資料塊達到8塊,hmaster將資料塊載入到本地,進行合併
2.當合併的資料超過512m,進行拆分,將拆分後的region分配給不同的hregionserver管理
3.當hregionser宕機後,將hregionserver上的hlog拆分,然後分配給不同的hregionserver載入,修改.meta.
4.注意:hlog會同步到hdfs
1.通過zookeeper .meta.表定位hregionserver。
2.資料從記憶體和硬碟合併後返回給client
3.資料塊會快取
1.管理使用者對table的增、刪、改、查操作;
2.記錄region在哪台hregion server上
3.在region split後,負責新region的分配;
4.新機器加入時,管理hregion server的負載均衡,調整region分布
5.在hregion server宕機後,負責失效hregion server 上的regions遷移。
hregion server主要負責響應使用者i/o請求,向hdfs檔案系統中讀寫資料,是hbase中最核心的模組。
hregion server管理了很多table的分割槽,也就是region。
2層結構其實完全能滿足業務的需求,因此0.96版本以後將-root-表去掉了。
訪問路徑變成了3步:
第2步:client請求.meta.所在的regionserver獲取訪問資料所在的regionserver位址,client會將.meta.的相關資訊cache下來,以便下一次快速訪問。
第3步:client請求資料所在的regionserver,獲取所需要的資料。
總結去掉-root-的原因有如下2點:
其一:提高效能
其二:2層結構已經足以滿足集群的需求
這裡還有乙個問題需要說明,那就是client會快取.meta.的資料,用來加快訪問,既然有快取,那它什麼時候更新?如果.meta.更新了,比如region1不在rerverserver2上了,被轉移到了rerverserver3上。client的快取沒有更新會有什麼情況?
其實,client的元資料快取不更新,當.meta.的資料發生更新。如上面的例子,由於region1的位置發生了變化,client再次根據快取去訪問的時候,會出現錯誤,當出現異常達到重試次數後就會去.meta.所在的regionserver獲取最新的資料,如果.meta.所在的regionserver也變了,client就會去zk上獲取.meta.所在的regionserver的最新位址。
八.lsm樹
為了克服b+樹的弱點,hbase引入了lsm樹的概念,即log-structured merge-trees。
為了更好的說明lsm樹的原理,下面舉個比較極端的例子:
現在假設有1000個節點的隨機key,對於磁碟來說,肯定是把這1000個節點順序寫入磁碟最快,但是這樣一來,讀就悲劇了,因為key在磁碟中完全無序,每次讀取都要全掃瞄;
那麼,為了讓讀效能盡量高,資料在磁碟中必須得有序,這就是b+樹的原理,但是寫就悲劇了,因為會產生大量的隨機io,磁碟尋道速度跟不上。
lsm樹本質上就是在讀寫之間取得平衡,和b+樹相比,它犧牲了部分讀效能,用來大幅提高寫效能。
它的原理是把一顆大樹拆分成n棵小樹, 它首先寫入到記憶體中(記憶體沒有尋道速度的問題,隨機寫的效能得到大幅提公升),在記憶體中構建一顆有序小樹,隨著小樹越來越大,記憶體的小樹會flush到磁碟上。當讀時,由於不知道資料在哪棵小樹上,因此必須遍歷所有的小樹,但在每顆小樹內部資料是有序的。
Hbase原理與架構
1 client向hregionserver傳送寫請求。2 hregionserver將資料寫到hlog write ahead log 為了資料的持久化和恢復。3 hregionserver將資料寫到記憶體 memstore 4 反饋client寫成功。1 當memstore資料達到閾值 預設是1...
HBase表的架構原理
hbase總體架構圖 hbase table的基本單位是region,乙個table相應多個region。table層級關係例如以下 table hbase table region regions for the table store store per columnfamily for eac...
HBASE部分 HBASE的架構
hbase的架構 包含訪問hbase的介面並維護cache來加快對hbase的訪問 zookeeper 保證任何時候,集群中只有乙個master 存貯所有region的定址入口。實時監控region server的上線和下線資訊。並實時通知master 儲存hbase的schema和table元資料...