1. 程式人生 > >Hbase的原理

Hbase的原理

一、HBase是針對谷歌BigTable的開源實現,是一個高可靠、高效能、面向列、可伸縮的分散式資料庫,主要用來儲存非結構化和半結構化的鬆散資料。HBase可以支援超大規模資料儲存,它可以通過水平擴充套件的方式,利用廉價計算機叢集處理由超過10億行資料和數百萬列元素組成的資料表。
二、在Hadoop生態系統中的位置在這裡插入圖片描述

在這裡插入圖片描述
三、Hbase與傳統的資料庫之間的主要區別有一下幾個方面
(1)資料型別:關係型資料庫採用的是關係模型,具有豐富的資料型別和儲存方式,Hbase則採用了更加簡單的資料模型,把資料儲存為未經解釋的字串(byte[])
(2)資料操作:資料庫中包含了豐富的操作,其中會設計複雜的多表連線。Hbase操作則不存在複雜的表與表之間的關係,只有簡單的插入、查詢、刪除清空等,因為Hbase在設計上就避免了複雜的表與表的之間的關係
(3)儲存模式:關係資料庫是基於行模式儲存的,HBase是基於列式儲存的每個列族有幾個檔案儲存,不同的列族的檔案時分離的。
四、Hbase的元件
Hbase中的元件有Master 和regionServer
(1)Master負責管理和維護HBase表的分割槽資訊,維護Region伺服器列表,分配Region,負載均衡
(2)RegionServer負責儲存和維護分配給自己的Region,處理來自客戶端的讀寫請求
注意:


1、Master和Regionserver的關係和NameNode和DataNode的關係並不一樣,NameNode中儲存了元資料,讀取資料時都需要經過NameNode,但是Hbase中讀取資料並不直接經過Master,客戶端並不依賴Master,是通過Zookeeper獲取Region的位置資訊,再去相應RegionServer上讀取資訊,這種方式使得Master的負載很小
2、因為在讀取資料時並不是通過Master,所以即使Master 掛掉了,依然可以讀取資料,Master可以對RegionServer進行維護,在這中情況下,可以通過Zookeeper來讀取資料,但是如果此時再有RegionServer關掉了,是沒有Master把掛掉的Regionserver中的Region分配出去的,資料就可能丟失

五、Hbase 中表的結構:
表名
行鍵(RowKey)
列族
根據行鍵+列族+列 可以定位一個Cell
在這裡插入圖片描述

Region:
當表的大小超過設定的值的時候,Hbase會自動的將表劃分為不同的區域,每個區域包換所有行的一個子集,對使用者來說,每個表是一堆資料的集合,考主鍵來區分,一張表被拆分了多個塊,每個塊就是一個Region,我們用表名+開始/結束 主鍵 來區分每個Region,一個Region會儲存會儲存一個表中的某段連續的資料,從開始主鍵到結束主鍵,一張完整的表時儲存在多個region上面的。

讀取資料:

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
在儲存時,每個列族都有一個memstore, 當不斷寫入檔案時,會先寫到HLog【HLog在hdfs上,以防止當出現異常時,memstore記憶體中的資料丟失】中,然後寫到memstrore(記憶體中),當記憶體中滿了之後,會溢寫到Hfile檔案上,當Hfile檔案個數達到閾值時,每一個region 會把相同列組上的 HFile檔案進行合併,合併成一個大檔案,最終有幾個 列組就有幾個HFile【在hdfs上】檔案(對於每一個region來說 ),日誌目錄是WAL
在這裡插入圖片描述