hbase的實現原理和運行機制

hbase的實現原理

Hbase的功能組件

在這裏插入圖片描述

庫函數:

一般用於連接每個客戶端,客戶端能夠利用庫函數訪問Hbase的數據

HMaster:

對於元數據進行維護和變更
監控並維護Region服務器列表
檢索集羣中那些Region服務器在工作,並處理Region服務器故障轉移
處理Region的分配與移除
負責調整分裂、合併後的Region的分佈
進行數據的負載均衡
通過ZK發佈自己的位置給客戶端

HRegionServer

負責存儲Hbase的實際數據
處理分配給Region服務器的數據
刷新緩存到HDFS
維護HLog(預寫入日誌)
執行壓縮
對Region進行分片

HRegion

一個Hbase表被劃分爲多個Region,當Region增大到一定地步的時候,就會進行查分,拆分成多個Region。拆分操作並非是物理拆分,而是邏輯上拆分爲兩個Region,數據的實際存儲位置並未發生變化,所以這個拆分過程非常的迅速。同一個Region不會拆分到不同的Region服務器上的,每一個Region服務器大概可以存儲10到1000個Region。當文件拆分到一定地步的時候,就會進行合併,合併後的數據纔會移動到新的物理存儲位置。單個Region的大小推薦爲1GB到2GB(根據單臺服務器的有效處理能力來決定)

定位Region

在這裏插入圖片描述
Hbase中有着兩張特殊的Table,-ROOT-(高版本已經移除)和**.META.**
1.通過Zookeeper中記錄的**-ROOT-表的位置信息來查找-ROOT-
2.
-ROOT-表中記錄了.META.表的Region信息,通過-ROOT-表可以訪問.META.表總的信息,-ROOT-表只有一個Region**
3.**.META.表內部是以key/value的形式來記錄了所有用戶數據表的Region信息,.META.**表可以有多個Region
4.爲了加快尋址速度,客戶端會緩存數據所在的位置信息。但是,這樣就需要解決緩存失效問題。Hbase採用的是惰性解決機制,不會管當前緩存是否失效,只有當依照當前緩存的位置信息去尋找數據尋找不到的時候,纔會重新通過三層尋址方法再次尋找數據地址,然後再把最新的位置信息緩存下來

Hbase的運行機制

Hbase的架構

在這裏插入圖片描述
1.客戶端:
客戶端在最開始的時候通過ZK實現的三級尋址方法來訪問數據,在之後會通過緩存的位置信息直接獲取數據。
2.ZK:
Zookeeper中存儲着HMaster的信息,客戶端通過ZK中的信息來到達HMaster
3.HMaster:
HMaster中存儲着每個Region服務器的信息和服務器中的HRegion的信息,通過確定要Region在哪個Region服務器上,然後訪問對應的服務器。
4.HRegionServer:
存儲着HRegion,當要對HRegion進行操作的時候,會先與寫入日誌到HLog中,然後再操作對應的HRegion。RegionServer運行於DataNode上,數量可以與DatNode數量一致。
5.HLog:
預寫入日誌(Write-Ahead logs),Hbase的修改記錄,當對Hbase讀寫數據的時候,數據並不是直接寫入到磁盤當中,而是會在尺寸中保留一段時間(時間以及數據量的閾值可以設定)。丹巴數據保存到內存中會有很高几率引起數據丟失,爲了解決這個問題,數據會先寫入到HLog中,然後再寫入內存中。當系統發生過賬的時候,數據可以通過這個日誌文件重建。
每個Region服務器都只有一個HLog。
當其中一個Region服務器出現故障的時候,當HMaster檢測到的這個Region服務器出現故障之後,就會獲取這個故障Region服務器的HLog文件,然後將HLog中的數據進行拆解,根據拆解後的HLog到其他的Region服務器上將數據進行恢復。
6.HRegion:
Hbase表的分片,Hbase表會根據RowKey支被切分在不同的Region存儲在Region服務器中。
7.Store:
一個Store對應HBase表中的一個列簇。
8.MemStore:
顧明思議,就是內存存儲,位於內存中,用來保存當前的數據操作。當數據日誌保存在HLog中之後,Region服務器會在內存中存儲鍵值對。
9.StoreFile:
當MemStore中數據存儲達到一定時間或者數據大小達到一定的閾值之後,就會存儲爲一個個的StoreFile。StoreFile的數量達到一定地步的時候,會進行合併操作。當合並後的StoreFile大小達到一定的閾值的時候,會執行分割操作,分割爲一塊塊的數據。
10.HFile:
這是在磁盤上保存原始數據的實際的物理文件,是實際的存儲文件。

緩存刷新機制

系統會週期性地將MemStore緩存中的內容刷寫入到磁盤的StoreFile文件中,清空緩存,並在HLog中寫入一個標記。
每次刷新都會產生一個新的StoreFile文件,因此每個Store包含多個StoreFile文件。
每個Region服務器都有一個自己的HLog文件,每次啓動都會檢查該文件,確定最近一次執行緩存刷新操作之後是否發生新的寫入操作,如果發現有更新,則會先寫入到MemStore中,再刷寫到StoreFile文件,最後刪除舊的HLog文件,開始爲客戶端提供服務。

StoreFile合併與分割

在這裏插入圖片描述
每次的刷寫都會產生一個StoreFile文件,當StoreFile文件過多的時候,會影響查找的速度,於是就合併爲一個新的大的StoreFile文件。
但是當StoreFile一直進行合併操作,就會造成合並之後的StoreFile文件過大,於是又分割爲多個大小適中的StoreFile文件。

寫入數據

首先,客戶端訪問ZK,訪問到HMaster,通過HMaster來確定寫入的數據存儲在那個Region服務器的HRegion中。
接着,在HRegion中先進行進行預寫入日誌操作,將數據操作寫入到HLog中。然後再講數據寫入到MemStore中,當MemStore中的數據存在一定的時間,或者數據量達到一定的閾值之後,就會寫入到磁盤當中。只有HLog中的數據完整寫入到磁盤當中之後,客戶端寫入的數據才允許被客戶端調用獲取。

讀取數據

第一次讀取,客戶端先訪問ZK,然後訪問到HMaster,通過HMaster來確定HRegion位於哪個Region服務器上。訪問對應的Region服務器,在HRegion中先訪問MemStore,如果緩存中找到數據,就直接讀取,如果緩存中沒有數據就對StoreFile進行查找。在客戶端中緩存當前數據的Region信息。
第二次讀取,直接通過緩存來尋找對應的Region服務器上的HRegion中的信息。如果通過客戶端的緩存查找不到,在按照第一次讀取的步驟來進行操作。

國家開放大學(原名瀋陽電大)

在這裏插入圖片描述
春季班,開始報名國家開放大學(原名瀋陽電大),無需考試,全程託管,國家承認學歷,學信網可查 ,學制2.5年。專科,本科,報名的各位學員可以交材料嘍!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章