HBase(一): HBase 表結構及數據模型和架構的理解

1. 大數據領域常用存儲介紹對比:

HDFS: NOSQL
Hive:有SQL 慢
HBase: NoSQL 快 (Phoenix + HBase)
Kudu: Impala + Kudu 組合
CASSAndra

2. HBase 表概念:

一個HBase表由一個或者多個列族(CF)組成,一個列族又包含很多列(限定符,CQ),每列存儲相對應的值,和傳統的關係型數據庫不一樣HBase是稀疏表,一些列根本不存值,但是也不會存儲null值,且該列不會被添加到表中,一旦一個rowkey及相對應的列值形成了,將會被存儲到表中。

Rowkey : PK 每一條數據的主鍵
Column Family: 列族 將表進行切割的 簡稱CF (CF數量儘量不要超過3,過多維護的開銷大)
Column :數據列族
Version Number 類型爲Long,默認值爲系統時間戳
Value :
在這裏插入圖片描述
圖說明:一行row的數據是可以包含一個或多個CF,不建議設置超過3個。
Column是屬於CF,一個CF可以包含1個或多個Column。

3. Region

HBase 將數據分佈存儲在多個服務器中,所以表被分割成多個region,每個region將會存儲一個指定區間的數據。region將會被分配到RegionServer以服務於每個region的內容。
每個region 都有一個起始健和一個結束鍵來定義他的邊界,所有這些信息將隨着文件保存在region中,也會保存在Hbase:meta表中。region可以合併和分裂
在這裏插入圖片描述
物理層面Region:
一個RegionServer管理1個或多個Region;
一個Region管理1個或多個CF(列族)
邏輯層面Region:
表按照rowkey範圍劃分不同的region,region按列族劃分不同的store。
store包含memstore 和 storefile。

建表時默認只有一個region,假如指定spilt rowkey,就會有多個region。
假如 有100w 數據 寫到50w的時候 自動split(分裂) ,就形成region2,這時候region2就可以理解爲字表,當region的行數繼續寫達到閾值,region繼續分裂。不同的region被HMater分配給合適的HRegionServer管理。

在這裏插入圖片描述

  • 表按照rowkey範圍劃分不同的region,region按列族劃分不同的store。store包含memstore 和 storefile。

數據模型邏輯視圖 如下圖
數據模型邏輯視圖

  • 整個數據是按照rowkey,字典排序
  • null值是不會存儲的
  • 整個表是以稀疏表的方式存儲

數據模型物理視圖 如下圖在這裏插入圖片描述

  • 按KV結構
    K: rowkey
    V: CF,Column ,TimeStamp ,Value
  • 每個K V只存儲一個單元格cell數據
  • 不同的CF數據是存儲在不同的文件裏

4 HBase 架構圖

在這裏插入圖片描述

4.1架構圖剖析:

4.1.1 架構中涉及的角色

HBase是一個分佈式的架構,除去底層存儲的HDFS外,HBase本身從功能上可以分爲三塊:Zookeeper羣、Master羣和RegionServer羣。

DML 讀寫不經過master;DDL經過master

  • Zookeeper羣:HBase集羣中不可缺少的重要部分,主要用於存儲Master地址、協調Master和RegionServer等上下線,存儲臨時數據等等。RS主動向ZK註冊,使得Master可以隨時感知RS的健康狀態。
  • Master羣:Master主要是做一些管理操作,如:
    負責hbase的table region的管理
    rs的region的負載均衡
    region的分裂 及分裂後的region的分配
    rs掛的時候 region遷移,
    一般數據的讀寫操作並不需要經過Master集羣,所以Master一般不需要很高的配置即可
  • RegionServer羣:RegionServer羣是真正數據存儲的地方,每個RegionServer由若干個region組成,而一個region維護了一定區間rowkey值的數據。
    RS主要負責數據的路由,數據讀寫和數據的持久化。

一個RS節點包含多個region,
一個region根據CF劃分爲store,
一個store包含1個memstore、0或多個storefile。
一個region只能屬於一個表,在一個RS節點上

4.1.2 memstore

寫緩衝
region級別(store級別)
有序,當滿了flush成爲一個storefile
當storefile文件數量增加到一定閾值,觸發compaction 合併 (後續博文介紹)

4.1.3 storefile

storefile 合併 逐步形成越來越大的storefile。 (後續博文介紹)

4.1.4 blockcache: 讀緩存

是RS級別 一個RS只有一個blockcache,啓動時完成初始化動作。

4.1.4 HLog

Write Ahead Log WAL
HLog是HBase實現WAL方式產生的日誌信息,其內部是一個簡單的順序日誌,每個RS上的region都共享一個HLog,所有對於該RS上的 region數據寫入都被記錄到該HLog中。HLog的主要作用就是在RS出現意外崩潰的時候,可以儘量多的恢復數據,這裏說是儘量多,因爲在一般情況 下,客戶端爲了提高性能,會把HLog的auto flush關掉,這樣HLog日誌的落盤全靠操作系統保證,如果出現意外崩潰,短時間內沒有被fsync的日誌會被丟失

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章