HBase概念入門

HBase簡介

HBase基於Google的BigTable論文而來,是一個分佈式海量列式非關係型數據庫系統,可以提供大規模數據集的實時隨機讀寫。

下面通過一個小場景認識HBase存儲。同樣的一個數據

用Mysql存儲是這樣的:

id name age salary job
1 小明 23 學生
2 小紅 1000 律師

如果是HBase的話,存儲是類似這樣列式存儲的:

field1 filed2
rowkey:1 name:小明
rowkey:1 age:23
rowkey:1 job:學生
rowkey:2 name:小紅
rowkey:2 salary:1000
rowkey:2 job:律師

HBase這樣存儲的優點是:

  • 有空值字段的情況下,能減少存儲空間佔用
  • 支持好多列

HBase的特點

  • 海量存儲:底層基於HDFS存儲海量數據
  • 列式存儲:HBase表的數據是基於列族進行存儲的,一個列族包含若干列
  • 極易擴展:底層依賴HDFS,當磁盤空間不足的時候,只需要動態添加DataNode服務節點就行了
  • 高併發:支持高併發的讀寫請求
  • 稀疏性:稀疏主要是針對HBase列的靈活性,在列族中,你可以指定任意多的列,在列數據爲空的情況下,是不會佔用存儲空間的。
  • 數據的多版本:HBase表中的數據可以有多個版本值,默認情況下是根據版本號取區分,版本號就是插入數據的時間戳
  • 數據類型單一:所有的數據在HBase中是以字節數組進行存儲

HBase的應用

  • 交通方面:船隻GPS信息,每天都有成千上萬的數據存儲
  • 金融方面:消費信息、貸款信息、信用卡還款信息
  • 電商方面:電商網站的交易信息、物流信息、遊覽信息等
  • 電信、移動等:通話信息

HBase的缺點

  • HBase的有效性存在一定的問題,集羣中一個節點宕機,這個節點的數據暫時就不能訪問了,需要等待一定的時間進行同步處理。
  • HBase的監控粒度太粗
  • 查詢簡單,只能根據key掃描一條信息或者全部掃描
  • 不支持交叉表、事務、連接查詢

總結:HBase適合海量明細數據的存儲,並且後期能有很好的查詢性能(單表超千萬、上億,且併發要求高)

HBase數據模型

HBase邏輯結構

HBase物理存儲

HBase存儲的時候是以列族爲單位進行存儲的。

HBase模型描述

  • NameSpace

命名空間,類似於關係型數據庫的database概念。每個namespace下有多個表。HBase兩個自帶的namespace,分別是hbase和default,hbase中存放的是HBase內置的表,default表是用戶默認使用的namespace。一個表可以自由選擇是否有namespace,如果創建表的時候加了namespace,這個表名字以:作爲區分

  • Table

類似於關係型數據庫的表的概念。不同的是,HBase定義表時只需要聲明列族即可,數據屬性:如超時時間、壓縮算法等,都在列族的定義中定義,不需要聲明具體的列

  • Row

HBase表中的每行數據都由一個RowKey和多個Column列組成。一個行包含了多個列,這些列通過列族來分類,行中的數據所屬列族只能從表所定義的列族中選取

  • RowKey

Rowkey由用戶指定的一串不重複的字符串定義,是一行的唯一標識。數據是按照Rowkey的字典順序存儲的,並且查詢數據時只能根據Rowkey進行檢索,所以Rowkey的設計十分重要。如果使用了之前已經定義的RowKey,那麼會將之前的數據更新掉

  • Column Family(列族)

列族是多個列的集合,一個列族可以動態靈活的定義多個列。表的相關屬性大部分都定義在列族上,同一個表裏的不同列族可以有完全不同的屬性配置,但是同一個列族內的所有列都會有相同的屬性。列族存在的意義是HBase會把相同列族的列儘量放在同一臺機器上。

  • Column Wualifier(列)

HBase中的列是可以隨意定義的,一個行中的列不限名字、不限數量、只限定列族。因此列必須依賴於列族存在。列的名稱前必須帶着所屬的列族

  • TimeStamp(版本)

用於標識數據的不同版本,時間戳默認由系統指定,也可以用戶顯式指定。在讀取數據的單元格時,版本號可以忽略,如果不指定,HBase默認會獲取最後一個版本的數據返回

  • Cell

一個列中可以存儲多個版本的數據。而每個版本就稱爲一個單元格

  • Region

HBase 將表中的數據基於RowKey的不同範圍劃分到不同Region上,每個Region都負責一定範圍的數據存儲和訪問。每個表一開始只有一個Region,隨着數據不斷插入表,Region不斷增大,當增大到一個閥值的時候,Region就會等分成兩個新的Region。當table中的行不斷增多,就會有越來越多的Region。

HBase整體架構

  • Zookeeper

    • 實現了HMaster的高可用,保存了HBase的元數據信息,是所有HBase表的尋址入口
    • 對HMaster和HRegionServer實現了監控
  • HMaster(Master)

    • 爲HRegionServer分配Region
    • 維護整個集羣的負載均衡
    • 發現失效的Region,並將失效的Region分配到正常的HRegionServer上
  • HRegionServer(RegionServer)

    • 負責管理Region
    • 接受客戶端的讀寫數據請求
    • 切分在運行過程中變大的Region
  • Region

    • 每個HRegion由多個Store構成
    • 每個Store保存一個列族,表有幾個列族,則有幾個Store
    • 每個Store由一個MemStore和多個StoreFile組成,MemStore是Store在內存中的內容,寫到文件後就是StoreFile。StoreFile底層就是以HFile的格式保存。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章