迄今,相信你們確定據說過 HBase,可是對於 HBase 的瞭解可能僅僅是它是 Hadoop 生態圈重要的一員,是一個大數據相關的數據庫技術。
今天我帶大家一塊兒領略一下 HBase 體系架構,看看它是如何大規模處理海量數據。數據庫
1、什麼是 HBase?緩存
關於 HBase 的實現,是基本遵循 Bigtable 的論文。HBase 是一個面向列的分佈式數據庫,也是個非關係型數據庫系統(NoSQL),它創建在 Hadoop 文件系統之上。面向列的數據庫是將數據表存儲爲數據列的一部分而不是數據行的數據庫。服務器
HBase 是一個分佈式,持久,嚴格一致的存儲系統,具備接近最佳的寫入 I / O 通道飽和度和出色的讀取性能。並且 HBase 只考慮單個索引,相似於 RDBMS 中的主鍵,提供服務器端實現靈活的二級索引解決方案。架構
2、爲何使用 HBase?負載均衡
HBase 是 Hadoop 生態圈中重要的一環,用於存儲,管理和處理數據。咱們知道 Hadoop HDFS 是沒法處理高速隨機寫入和讀取,也沒法在不重寫文件的狀況下對文件進行修改。HBase 正好解決了 HDFS 的缺點,由於它使用優化的方式快速隨機寫入和讀取。此外,隨着數據呈指數增加,關係數據庫沒法提供更好性能去處理海量的數據。HBase提供可擴展性和分區,以實現高效的存儲和檢索。框架
3、HBase 體系架構分佈式
咱們先來看看 HBase 的架構設計,由上圖咱們能夠得知,HBase 主要由如下及部分組成:oop
Master性能
對 Region 進行負載均衡,分配到合適的 HRegionServer。
全部 HRegion 的信息,包括存儲的 Key 值區間、所在 HRegionServer 地址、訪問端口號等,都記錄在 HMaster 服務器上。大數據
ZooKeeper
HBase 會啓動多個 HMaster,並經過 ZooKeeper 選舉出一個主服務器。
Region Server
負責實際數據的讀寫. 當訪問數據時, 客戶端與 HBase 的 Region Server 直接通訊。
Region: HBase 中的數據都是按 Rowkey 進行排序的,對這些按 Rowkey 排序的數據進行水平切分,每一片稱爲一個 Region。 當一個 Region 中數據量太多時,這個 Region 連同 HFile 會分裂成兩個 Region,並根據集羣中服務器負載進行遷移。
5、HBase 如何尋址?
如你所知,Zookeeper 存儲 META 表。每當客戶端對 HBase 的讀取或寫入請求時,就會發生如下操做:
一、 客戶端從 ZooKeeper 中檢索 META 表的位置。
二、 而後,客戶端從 META 表請求相應 Rowkey 的 Region Server 的位置以訪問它。客戶端會緩存當前 META 表的信息。
三、 而後它將經過從相應的 Region Server 請求獲取行位置。
在這裏有一個地方要注意,客戶端會緩存 META 表信息,因此以後請求不會直接經過 META 表檢索 Region Server 的位置,除非由於區域被移位或移動而致使查詢失敗。而後它纔會再次請求 META 服務器並更新緩存。這樣能夠節省時間並且搜索過程會更快。
6、HBase 寫機制
數據寫入過程同樣要進行尋址,須要先獲得 Region Server 才能繼續操做。寫入機制按順序執行如下過程(參見上圖):
一、 每當客戶端有寫請求時,客戶端將數據寫入預寫日 WAL;
二、 將數據寫入 WAL 後,將其複製到 MemStore;
三、 將數據放入 MemStore 後,客戶端將收到確認;
四、 當 MemStore 達到閾值時,它將數據轉儲或提交到 HFile。
MemStore
MemStore 在內存按照 Key 的順序, 以 Key-Value 對進行存儲。每一個列族都有一個 MemStore,所以更新是以每一個列族的排序方式存儲。當 MemStore 達到閾值時,它會將已排序的全部數據轉儲到新的 HFile 中,HFile 存儲在 HDFS 中。HBase 爲每一個列族包含多個 HFile。
MemStore 還保存了最後寫入的序列號,所以 Master Server 和 MemStore 都知道,到目前爲止提交的內容以及從哪裏開始。當區域啓動時,將讀取最後一個序列號,並從該序列號開始新的寫入。
HFile
寫入順序放在磁盤上。所以,磁盤讀寫磁頭的移動很是少。這使得寫入和搜索機制很是快。只要 HFile 打開,HFile索引就會加載到內存中。這有助於在單個搜索中查找記錄。
7、什麼狀況應該使用HBase?
做爲 NoSQL DB,HBase 提供了許多良好的功能,但它仍然不是適用全部狀況的解決方案,進一步說它是爲了解決某一些方面而存在的。當你的應用程序要使用 HBase,須要考慮一些關鍵因數。
數據量: 數據量是最常考慮。在分佈式環境中通常處理 PB 級別的數據。不然,對於少許數據,它將在單個節點中存儲和處理,而其餘節點空閒,這是對技術框架的濫用。
吞吐量: HBase 其中一個最大優點就是接近最優的 I/O 讀寫速度,持續的大量的插入能夠達到每秒百萬的吞吐量。
關係特性: 應用程序對事務,觸發器,複雜查詢,複雜鏈接等 RDBMS 功能不作任何要求,HBase 對於這些基本都不支持。
除了以上幾點,當須要在非關係環境中進行容錯和可用的數據管理時,HBase也是合適的。在這裏許多人會拿 RDBMS 和 Hbase 進行比較, 其實二者的對比毫無心義,從上面幾點關鍵因數也能夠看出,二者適用於不一樣的場景,比較是毫無心義的。
8、小結
HBase 是在 HDFS 之上運行的非關係型(NoSQL)數據庫,提供對這些大型數據集的實時讀/寫訪問。HBase 水平擴展使其處理具備數十億行和數百萬列的大量數據集,而且它能夠輕鬆組合使用各類不一樣結構和模式的數據。正是如此,HBase 成爲 Hadoop 生態圈 中重要的一環,用於存儲,管理和處理大數據。