《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,獲取所需要的資料。