
注意:Hbase是依賴zookeeper和hdfs的,需要啟動zk和hdfs。
主要組件
Zookeeper:
HBase 通過 Zookeeper 來做 Master 的高可用、RegionServer 的監控、元數據的入口以及集群配置的維護等工作。
HDFS:
HDFS 為 HBase 提供最終的底層數據存儲服務,同時為 HBase 提供高可用的支持。
Master:(是所有 Region Server 的管理者,其實現類為 HMaster)
- 對RegionServer的操作:
-
監控RegionServer
-
處理RegionServer故障轉移
-
處理元數據的變更
-
處理region的分配或轉移
-
在空閑時間進行數據的負載均衡
-
通過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格式存儲的。
數據模型
邏輯結構圖
物理存儲結構
- Name Space
命名空間,類似於關系型數據庫的 DatabBase 概念,每個命名空間下有多個表。HBase有兩個自帶的命名空間,分別是 hbase 和 default,hbase 中存放的是 HBase 內置的表,default 表是用戶默認使用的命名空間。 - Row
HBase 表中的每行數據都由一個 RowKey 和多個 Column(列)組成,數據是按照 RowKey的字典順序存儲的,並且查詢數據時只能根據 RowKey 進行檢索,所以 RowKey 的設計十分重要。 - Column
HBase 表中的每行數據都由一個 RowKey 和多個 Column(列)組成,數據是按照 RowKey的字典順序存儲的,並且查詢數據時只能根據 RowKey 進行檢索,所以 RowKey 的設計十分重要。 - Time Stamp
用於標識數據的不同版本(version),每條數據寫入時,如果不指定時間戳,系統會自動為其加上該字段,其值為寫入 HBase 的時間。 - Cell
由{rowkey, column Family:column Qualifier, time Stamp} 唯一確定的單元。cell 中的數據是沒有類型的,全部是字節碼形式存貯(byte[]數組)。