7 Hbase 概述

一、什麼是 Hbase

​ Hbase 是一個構建在 Hadoop 之上的高可用、高性能、多版本的分佈式 NOSQL 數據庫。

二、Hbase 的特點

2.1、與 hdfs 對比

​ Hbase 是構建在 Hadoop 之上的,Hadoop 不支持隨即寫,但 Hbase 支持。

2.2 、與傳統數據庫的比較:

​ 1、傳統數據庫無法存儲很大量的數據,但 Hbase 可以通過增加節點的方式來存儲海量數據。

​ 2、傳統數據庫沒有很好的備份機制,但 Hbase 把的文件存儲是基於 hdfs 的,又健全的備份機制。

​ 3、傳統數據庫當數據量達到一定規模時速度就會很慢,而 Hbase 通過 Zookeeper 協調查找數據,訪問速度快。

三、Hbase 存儲數據的結構

3.1 邏輯結構

在這裏插入圖片描述

​ 從邏輯視圖來看,Hbase 的數據是以表的形式組織的,而且和關係型數據庫中的一樣,Hbase 的表由行和列構成。

解釋圖中的元素

1、RowKey

​ rowkey 是用來檢索記錄的主鍵。訪問 hbase table 中的數據,只有三種方式:通過單個 rowkey 訪問;通過 rowkey 的範圍;全表掃描。

​ rowkey 可以是任意字符串,存儲時,數據按照 row key 的字典排序。因此在設計 key 時,要充分利用排序存儲這一特性,將經常一起讀取的行存儲放到一起。

2、列簇(column family)

​ hbase 表中的每個列,都歸屬於某個列簇,列簇時 scheme 的一部分(而列不是),列命都以列簇爲前綴。

3、單元(cell)

​ hbase 中通過 row 和 columns 確定的唯一一個存儲單元稱爲 cell。

​ cell 是沒有數據類型的,全都是以字節碼的形式存儲。

4、時間戳(timestamp)

​ 每個 cell 都保持着同一數據的多個版本,版本通過時間戳來索引。

3.2 物理結構

在這裏插入圖片描述

​ 把每一個列簇單獨地存儲成一列,可以極大地節省空間。

三、Hbase 架構

在這裏插入圖片描述
解釋圖中元素

1、Client

​ 客戶端訪問 hbase 數據之前,首先通過源數據表定位目標數據所在的 RegionServer,之後纔會發送請求到 RegionServer,同時這些元數據會被緩存到本地,方便以後的請求訪問。如果 RegionServer 因爲發生宕機或者執行了負載均衡等導致數據分片發生遷移,客戶端需要重新請求最新的元數據並緩存到本地。

2、Zookeeper

​ Zookeeper 是一個分佈式的協調服務。

​ 在 hbase 中,Zookeeper 負責管理 Hbase 的核心元數據,如 Master 和 RegionServer 的狀態、元數據表所在的 RS 地址等。

3、Master

​ 1)Master 負責處理用戶的管理請求,例如:用戶的增刪改查操作。

​ 2)協調 RegionServer:爲 RS 分配 Region;發現失效的 RS 並重新分配位於其上的 Region;通過 ZK 監控集羣上所有 RS 的運行狀態。

​ 3)清理過期的 HLog 和 HFile

4、RegionServer

在這裏插入圖片描述
​ 1)響應用戶的 I/O 請求,向 HDFS 中讀寫數據。

​ 2)內部管理了一系列 HRegion 對象,每個 HRegion 對應 table 中的一個 Region,HRegion 由多個 Htore 組成,每個 Store 對應 table 中的一個 列簇。

5、HLog

​ 1)實現數據的高可靠性:hbase 數據寫入並不是直接寫入 HFile,而是先寫入緩存,再異步刷新羅盤。爲防止數據丟失,數據寫入緩存之前先寫入 HLog,這樣,即使緩存數據丟失,仍然可以通過 HLog 恢復。

​ 2)用於 hbase 集羣間數據同步:通過回放主機羣推送過來的 HLog 來實現主從集羣間的數據同步。

6、BlockCache

​ 客戶端從磁盤讀取數據之後通常會將數據緩存到系統內存中,後續訪問同一行數據可直接從內存中獲取,對於大量熱點讀的業務請求來說,帶來了極大的性能提升。

7、Region

在這裏插入圖片描述

​ hbase 用 rowkey 把表 “水平切割” 成多個 Region,Region 代表的是數據表的一個分片,通常一個表的 Region 會分佈在整個集羣的多個 RS 上,一個 RS 上會存放來自不同表的多個 Region。

四、Hbase 讀寫數據流程

4.1 寫數據流程

在這裏插入圖片描述

1、客戶端處理階段

​ 1)客戶端提交 put 請求後,會將數據添加到本地緩衝區中,符合一定條件時就異步批量提交。

​ 2)客戶端到 hbase:meta 中根據 rowkey 找到它們歸屬的 RegionServer。批量請求時會把這些 rowkey 按照不同的 RegionServer 分組。

​ 3)客戶端發送 RPC 請求給對應的 RegionServer。

2、Region 寫入階段

​ 1)RS 收到請求後,首先反序列化 put 對象,執行各種檢查(region是否只讀,Memstore是否超過指定大小等)

​ 2).建立行鎖(Acquire locks)->2.更新寫入時間->3.創建WAL edit對象->4.WAL edit寫入Hlog->5.數據寫入MemStore->6.釋放行鎖->7.刷寫Hlog到HDFS->8.結束事務

3、MemStore Flusn 階段

​ 當Region中的MemStore容量超過一定閾值,系統會異步執行flush操作,將內存中的數據寫入文件,形成HFile

4.2 讀數據流程

1、第一次讀數據

在這裏插入圖片描述

​ 1)從 Zookeeper 中獲取 hbase:meta 的位置,緩存該位置信息

​ 2)從 hbase:meta 中查詢用戶 table 對應請求的 rowkey 所在的 RegionServer,緩存該位置信息。

​ 3)從查詢到的 HRegionServer 中讀取 Row。

2、第一次以後讀數據

先查詢緩存裏能不能找到 Row 對應的 RegionServer,找到就直接做上面的第三步,找不到就依據情況從第一或者第二步開始。

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