總結深入瞭解HBase架構
HBASE特點:NoSQL資料庫 記憶體儲存機制 面向列儲存Hbase體系:主從架構 主節點管理者HMaster 從節點HRegionServerS 真正儲存資料 輔助框架Zookeeper 儲存HBASE相關的配置和元資料
HBASE物理模型 rowKey欄位順序排序 按照rowKey將table劃分為多Region, 一個regionServer管理者多個Region,一個region歸屬於一個regionServer region裡頭包含多個Store,到底幾個取決於表有幾個列簇一個,store包含一個MemStore(記憶體)和 0或多個Hfile(HDFS)
HBase架構元件
HBase由三種類型的伺服器構成主從式架構。Region Servers為資料的讀取和寫入提供服務。當訪問資料時,客戶端直接和Region Servers通訊。Region的分配,DDL (create, delete tables)操作有HBase Master程序處理。Zookeeper是HDFS的一部分,維護著一個活動的叢集。
Hadoop DataNode 儲存著Region Server所管理的資料。所有的HBase資料儲存在HDFS的檔案中。Region Server和HDfs DataNode並置在一起,這使得RegionServers所服務的資料具有資料區域性性(使資料接近需要的位置)。HBase資料在寫入時是本地資料,但是當Region移動時,在壓實之前它不是本地資料。
NameNode維護構成檔案的所有物理資料塊的元資料資訊。
Regions
HBase表是按照rowkey範圍水平劃分為“Regions”.Region包含表中start key和end key之間的所有行。Region Server將Regions分配到叢集的節點中,並對資料的讀取和寫入提供服務。單個Redion Server可服務大約1000個region。
Master
Mater的主要職責:
協調Region Servers
啟動時分配Region,還原時重新分配Region或者負載均衡
監控叢集中所有RegionServer例項(監聽Zookeeper的訊息)
管理員方法
提供建立,刪除,更新表的介面。
HBase使用Zookeeper做為分散式協調服務來維護及群眾server的狀態。Zookeeper維護處於活狀態並可使用的Severs,並提供Server故障通知。Zookeeper使用共識來保證共同共享的狀態。
META表
HBase有一個叫做META的特殊的目錄表,用於儲存叢集中regions的位置資訊。Zookeeper儲存著META表的位置。
以下是客戶端第一次讀取和寫入HBase時發生的情況:
1.客戶端從zookeeper中META Table的位置.
2.客戶端查詢.META。伺服器獲取客戶端想要訪問的並且是rowkey所相對應Region Server的資訊。客戶端會將META快取帶本地。
3.從相應的Region Server獲取行
在未來的讀取操作過程中,客戶端使用Meta Cache來檢索META Table的位置和之前讀取的Row Keys。隨著時間的推移,不再需要查詢META table了,除非應為一個region轉移而錯過,那麼它將重新查詢並更新Meta Cache。
1.META表是一個儲存的了系統中所有region列表的HBase表。
2.META表就像一顆B—tree
3.METa的結構如下:
Key: region start key,region id
Values: RegionServer
HBASE表中資料檢索3種方式 方式一:單條獲取 --最快 get rowKey 方式二:全部掃描 scan 方式三:範圍查詢 --最多 scan 設定查詢範圍的條件 rowKey
region的劃分 HBASE表中儲存資料,安裝rowkey字典升序方式進行排序 -1、按照rowkey劃分為region(區域) 類比於HDFS儲存資料劃分為多個block -128MB -a 預設情況下,建立一個表的時候,只有一個region, startKey和end Key都是null(表示不限制) -b 在實際專案中,需要進行預分割槽(需要region的個數),指定rowkey -2 每個region劃分範圍 [startKey endKey) 表示該region中僅僅包含從startKey到endKey結束的資料
1.WAL:預寫日誌是分散式檔案系統上的檔案。WAL用於儲存尚未被永久儲存的新資料,用於故障情況下的恢復。
2.BlockCache: 是讀取快取。在記憶體中儲存頻繁讀取的資料,近期最少使用的資料在滿時被刪除。
3.MemStore:是寫入快取。儲存尚未寫入磁碟的資料。在寫入磁碟之前進行排序,每個region的每個column family有一個MemStore。
4.在磁碟上,Hfiles將行儲存為已排序的KeyValues。
Flush
當MemStrore積聚了足夠的資料,整個有序集合被寫入到HDFS的HFile中。HBase每個列族使用多個HFile,其中包含真正的Cell或者KeyValue例項。隨著時間的推移,在MenStore中跟據KeyValue排序,最終重新整理到磁碟HFile檔案中。
注意這也是HBase為什麼限制列族數量的一個原因。每個列族只有一個MemStore;當一個MemStore資料滿了,會重新整理到磁碟檔案中。它還儲存了最近寫入的序列號,以便讓系統知道到目前為止持久化的情況。
高位序列號作為元欄位儲存在每個HFile中,以反映持久化結束位置以及繼續執行的位置。在region啟動時,序列號被讀取後,然後最高位做為新編輯內容的序列號。