首頁>技術>

Hbase是面向列的NoSQL資料庫,僅能透過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務。主要用來儲存非結構化和半結構化的鬆散資料。

所有資料都儲存在HDFS上,使用者透過訪問region服務獲取資料,一個物理節點一般只能執行一個region伺服器,主要組成部分為:HLog(WALs)和多個region;一個HStore包含:一個MemStore和多個HFile。

Hbase使用Zookeeper來監控HRegionServer的健康狀況,並交給HMaster管理。同時Zookeeper也進行HMaster選舉,解決它單點問題。

資料結構

從資料結構來看,Hbase將資料按照表、行和列進行儲存。HBase資料結構由以下構成:META,NameSpace,Table與Schema,Row與RowKey,Column Family與Column Qualifier,Cell與Timestamp。

名稱空間是表的集合,表是行的集合,行是列族的集合,列族是列的集合,列是鍵值對的集合,每個列的值都具有時間戳。

訪問資料只有三種方式:透過單個row key訪問;透過row key的range(正則);全表掃描。

表模型

HBase物理資料模型是三維有序儲存概念,它的三維是指:rowkey(行主鍵),column key(columnFamily+< label>),timestamp(時間戳或者版本號)三部分組成。

以概念來看,結構如下:

以物理儲存來看,是根據Column Family(列族)儲存的:

資料讀取是透過RowKey定位到對應的region以及regionserver,在找到對應的store後,查詢的順序是先memstore,然後blockcache,最後到HFile(File會被切分為多個有相同的資料結構且大小相等的HFileBlock)。

Hbase系統相關的元資料也以表的方式儲存。常見有的:meta、namespace等。meta是Hbase訪問表中資料的入口,它的Region地址還會登記在Zookeeper中。

namespace表

namespace(名稱空間)是表的邏輯分組,是多租戶特性基礎,可進行資源配額管理、安全、Region伺服器分配等。名稱空間記錄都儲存在hbase:namespace表。

預定義的名稱空間有:

hbase:系統名稱空間,用於包含hbase的內部表。其中幾個常見系統表有hbase:meta表(使用者表的元資訊)、hbase:namespace表(名稱空間的元資料)、hbase:quota表(資源限制)、hbase:acl表(許可權)。default:所有未指定名稱空間的表都自動進入該名稱空間,也就是預設下的使用者表。meta表

hbase:meta表儲存了所有使用者HRegion的位置資訊,同時此表也是Hbase的Table,同樣的儲存模式與讀寫方式。此表的RegionSever資訊儲存在zookeeper中,客戶端訪問zookeeper得到meta表所在地址後(會快取起來),再訪問region server, 得到需要的meta表,就知道其他使用者表的RegionServer資訊了。

它的RowKey是:tableName,regionStartKey,regionId,replicaId等。

它只有info列族,這個列族包含三個列,他們分別是:

info:regioninfo列是RegionInfo的proto格式:regionId,tableName,startKey,endKey,offline,split,replicaId。info:server格式:HRegionServer對應的server:port。info:serverstartcode格式:HRegionServer的啟動時間戳。

2.x版增加了info:sn與info:state,分別記錄Region的標識和狀態。還新增了table 列族,欄位table:state記錄表的狀態。

表資訊存放在zookeeper中的/hbase/table/hbase:meta。

附:Hfile

HFile:HBase中KeyValue資料的儲存格式,是 Hadoop 的二進位制檔案格式,是 StoreFile 的輕量級包裝。表資料在hdfs中儲存目錄:

/hbase  /data    /<Namespace>  # 名稱空間      /<Table>  # 表        /<Region>  # 表的region          /<ColumnFamily>  # 列族            /<StoreFile>  # 資料檔案
附:Hlog(WALs)

HLog File:(Write Ahead Log) 預寫日誌(HLog)檔案,在物理上是 Hadoop 的 Sequence File。

預寫日誌檔案在hdfs中儲存目錄:

/hbase  /WALs    /<RegionServer>  # 一個regionserver共用WALs      /<WAL>  # 資料檔案

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 什麼是不完全型別?