Hbase詳細架構圖解
阿新 • • 發佈:2020-04-28
[TOC](Hbase詳細架構圖解)
![Hbase架構圖](https://img-blog.csdnimg.cn/20200330102942226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcyNjc3NA==,size_16,color_FFFFFF,t_70#pic_center)
**注意**:Hbase是依賴zookeeper和hdfs的,需要啟動zk和hdfs。
# 主要元件
**Zookeeper:**
HBase 通過 Zookeeper 來做 Master 的高可用、RegionServer 的監控、元資料的入口以及叢集配置的維護等工作。
**HDFS:**
HDFS 為 HBase 提供最終的底層資料儲存服務,同時為 HBase 提供高可用的支援。
**Master:(是所有 Region Server 的管理者,其實現類為 HMaster)**
- 對RegionServer的操作:
1. **監控**RegionServer
3. 處理RegionServer**故障轉移**
4. 處理**元資料**的變更
5. 處理region的**分配或轉移**
6. 在空閒時間進行資料的**負載均衡**
7. 通過Zookeeper釋出自己的位置給客戶
- 對於表的操作(DDL)
create, delete, alter
**RegionServer:(為 Region 的管理者,其實現類為 HRegionServer)**
1.負責儲存HBase的實際資料
2.處理分配給它的Region
3.重新整理快取到HDFS
4.維護Hlog
5.執行壓縮
6.負責處理Region分片
對於資料的操作:(DML)
get, put, delete;
**Region:**
Hbase表的分片,HBase表會根據RowKey值被切分成不同的region儲存在RegionServer中,在一個RegionServer中可以有多個不同的region。
**Hlog:**
又稱Write-Ahead logs(WAL)預寫入日誌。
HBase的修改記錄,當對HBase讀寫資料的時候,資料不是直接寫進磁碟,它會在記憶體中保留一段時間(時間以及資料量閾值可以設定)。由於資料要經 MemStore 排序後才能刷寫到 StoreFile,但把資料儲存在記憶體中可能有更高的概率引起資料丟失,為了解決這個問題,資料會先寫在一個叫做Write-Ahead logfile的檔案中,然後再寫入記憶體中。所以在系統出現故障的時候,資料可以通過這個日誌檔案重建。
**Store:**
StoreFile儲存在Store中,一個Store對應HBase表中的一個列族(列簇, Column Family)。
**MemStore:**
寫快取,由於 StoreFile中的資料要求是有序的,所以資料是先儲存在 MemStore 中,排好序後,等到達刷寫時機才會刷寫到 StoreFile,每次刷寫都會形成一個新的 StoreFile。
**StoreFile:**
這是在磁碟上儲存原始資料的實際的物理檔案,是實際的儲存檔案。StoreFile是以Hfile的形式儲存在HDFS的。每個 Store 會有
一個或多個 StoreFile,資料在每個 StoreFile 中都是有序的(按照Rowkey的字典順序排序)。
**Hfile:**
可以理解成一種檔案格式(其他的檔案格式TXT,orc,parquet...),StoreFile是以hfile格式儲存的。
# 資料模型
邏輯結構圖
![邏輯結構](https://img-blog.csdnimg.cn/20200330150836394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcyNjc3NA==,size_16,color_FFFFFF,t_70#pic_center)
物理儲存結構
![物理儲存結構](https://img-blog.csdnimg.cn/20200330150951232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzcyNjc3NA==,size_16,color_FFFFFF,t_70#pic_center)
1. **Name Space**
名稱空間,類似於關係型資料庫的 DatabBase 概念,每個名稱空間下有多個表。HBase有兩個自帶的名稱空間,分別是 hbase 和 default,hbase 中存放的是 HBase 內建的表,default 表是使用者預設使用的名稱空間。
3. **Row**
HBase 表中的每行資料都由一個 **RowKey** 和多個 **Column**(列)組成,資料是按照 RowKey的字典順序儲存的,並且查詢資料時只能根據 RowKey 進行檢索,所以 RowKey 的設計十分重要。
4. **Column**
HBase 表中的每行資料都由一個 RowKey 和多個 Column(列)組成,資料是按照 RowKey的字典順序儲存的,並且查詢資料時只能根據 RowKey 進行檢索,所以 RowKey 的設計十分重要。
5. **Time Stamp**
用於標識資料的不同版本(version),每條資料寫入時,如果不指定時間戳,系統會自動為其加上該欄位,其值為寫入 HBase 的時間。
6. **Cell**
由{rowkey, column Family:column Qualifier, time Stamp} 唯一確定的單元。cell 中的資料是沒有型別的,全部是位元組碼形式存貯(byte[]數