1. 程式人生 > >《JAVA核心知識》學習筆記 (14. Hbase)

《JAVA核心知識》學習筆記 (14. Hbase)

14.1.1. 概念
base 是分散式、面向列的開源資料庫(其實準確的說是面向列族)。 HDFS 為 Hbase 提供可靠的
底層資料儲存服務, MapReduce 為 Hbase 提供高效能的計算能力, Zookeeper 為 Hbase 提供
穩定服務和 Failover 機制,因此我們說 Hbase 是一個通過大量廉價的機器解決海量資料的高速存
儲和讀取的分散式資料庫解決方案

 

14.1.2. 列式儲存
列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因此整個資料庫
是自動索引化的
 

這裡的列式儲存其實說的是列族儲存, Hbase 是根據列族來儲存資料的。列族下面可以有非常多
的列,列族在建立表的時候就必須指定。為了加深對 Hbase 列族的理解,下面是一個簡單的關係
型資料庫的表和 Hbase 資料庫的表:
 

14.1.3. Hbase 核心概念
14.1.3.1. Column Family 列族
Column Family 又叫列族, Hbase 通過列族劃分資料的儲存,列族下面可以包含任意多的列,實
現靈活的資料存取。 Hbase 表的建立的時候就必須指定列族。就像關係型資料庫建立的時候必須
指定具體的列是一樣的。 Hbase 的列族不是越多越好,官方推薦的是列族最好小於或者等於 3。我
們使用的場景一般是 1 個列族。
14.1.3.2. Rowkey(Rowkey 查詢, Rowkey 範圍掃描,全表掃描)
Rowkey 的概念和 mysql 中的主鍵是完全一樣的, Hbase 使用 Rowkey 來唯一的區分某一行的數
據。 Hbase 只支援 3 中查詢方式:基於 Rowkey 的單行查詢,基於 Rowkey 的範圍掃描,全表掃
描。
 

14.1.3.3. Region 分割槽
 Region: Region 的概念和關係型資料庫的分割槽或者分片差不多。 Hbase 會將一個大表的數
據基於 Rowkey 的不同範圍分配到不通的 Region 中,每個 Region 負責一定範圍的資料訪問
和儲存。這樣即使是一張巨大的表,由於被切割到不通的 region,訪問起來的時延也很低。
 

14.1.3.4. TimeStamp 多版本
 TimeStamp 是實現 Hbase 多版本的關鍵。在 Hbase 中使用不同的 timestame 來標識相同
rowkey 行對應的不通版本的資料。在寫入資料的時候,如果使用者沒有指定對應的
timestamp, Hbase 會自動新增一個 timestamp, timestamp 和伺服器時間保持一致。 在
Hbase 中,相同 rowkey 的資料按照 timestamp 倒序排列。預設查詢的是最新的版本,使用者
可同指定 timestamp 的值來讀取舊版本的資料
 

 

14.1.4. Hbase 核心架構
Hbase 是由 Client、 Zookeeper、 Master、 HRegionServer、 HDFS 等幾個組建組成。

14.1.4.1. Client:
 Client 包含了訪問 Hbase 的介面,另外 Client 還維護了對應的 cache 來加速 Hbase 的
訪問,比如 cache 的.META.元資料的資訊。
14.1.4.2. Zookeeper:
 Hbase 通過 Zookeeper 來做 master 的高可用、 RegionServer 的監控、元資料的入口
以及叢集配置的維護等工作。具體工作如下:
1. 通過 Zoopkeeper 來保證叢集中只有 1 個 master 在執行,如果 master 異
常,會通過競爭機制產生新的 master 提供服務
2. 通過 Zoopkeeper 來監控 RegionServer 的狀態,當 RegionSevrer 有異常的
時候,通過回撥的形式通知 Master RegionServer 上下限的資訊
3. 通過 Zoopkeeper 儲存元資料的統一入口地址
 

14.1.4.3. Hmaster
 master 節點的主要職責如下:
1. 為 RegionServer 分配 Region
2. 維護整個叢集的負載均衡
3. 維護叢集的元資料資訊發現失效的 Region,並將失效的 Region 分配到正常
RegionServer 上當 RegionSever 失效的時候,協調對應 Hlog 的拆分
14.1.4.4. HregionServer
 HregionServer 直接對接使用者的讀寫請求,是真正的“幹活”的節點。它的功能概括如
下:

1. 管理 master 為其分配的 Region
13/04/2018 Page 186 of 283
2. 處理來自客戶端的讀寫請求
3. 負責和底層 HDFS 的互動,儲存資料到 HDFS
4. 負責 Region 變大以後的拆分
5. 負責 Storefile 的合併工作
 

14.1.4.5. Region 定址方式(通過 zookeeper .META)
第 1 步: Client 請求 ZK 獲取.META.所在的 RegionServer 的地址。
第 2 步: Client 請求.META.所在的 RegionServer 獲取訪問資料所在的 RegionServer 地
址, client 會將.META.的相關資訊 cache 下來,以便下一次快速訪問。
第 3 步: Client 請求資料所在的 RegionServer,獲取所需要的資料。