1. 程式人生 > >Hbase詳細架構圖解

Hbase詳細架構圖解

[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[]數