hbase的體系結構遵從主從伺服器架構
主:hbase master
從:hregion server群
hbase中所有的伺服器都是通過zookeeper來協調 ,並處理執行期間可能出現的錯誤。
一、邏輯模型
以nutch-2.0下hbase存放資料的表"webpage"為例:
describe:,,
,,,,
,]}由表的描述(describe)可以得到表的結構,如上所示:
表名:webpage
列簇(families):'f','h','il','mk','mtdt','ol','p','s'
<?xml version="1.0" encoding="utf-8"?>webpage的邏輯結構如下圖:
row key: table的主鍵,table中的記錄按照row key排序,url倒排索引
timestamp: 時間戳,每次資料操作對應的時間戳,可以看作是資料的version number
column family:列簇,table在水平方向有乙個或者多個column family組成,乙個column family中可以由任意多個column組成,即column family支援動態擴充套件,無需預先定義column的數量以及型別,所有column均以二進位制格式儲存,使用者需要自行進行型別轉換。列簇預先定義,列動態擴充套件
其實,只要在某一時刻tn更新了某一行(row),某一列簇:某一列的資料,在邏輯檢視中就會增加乙個timestamp=tn,然後在該行、該列簇、該列儲存新增的內容,當然,如果在該時刻增加了該行多個列簇:列的資料,那麼新增的內容將對應同乙個時間戳。
問題:若在某時刻刪除了某行:某列簇:某列的內容呢?
根據在下的測試,在表中沒有記錄相應的操作資訊,就是直接把它給刪掉了!(有待驗證)
二、物理模型
hbase中的表被劃分成多個hregion,然後儲存到hregion server群當中,hbase master server中儲存的是資料到hregion server的對映。
在物理模型下,表的最小單位是cell
,乙個cell是指由行、列簇:列所確定的單元,其中存放的內容是timestamp和value,在上面的邏輯檢視中將timestamp抽象了出來,所以會存在空白的「虛擬單元」,這些空白的「虛擬單元」實際上不會被儲存,所以在物理模型下就是按列簇來儲存,當某列簇中的某列新增內容時就在該列簇:列中儲存timestamp和value,此處的timestamp其實表徵了版本,因為更新內容時並不刪除原來的內容,只是增加本次的內容。而更新其他列簇 的內容時並不需要在該列簇下寫資料,其實也沒有什麼資料可寫。
好像說的複雜了些,其實也很簡單的道理,全是廢話。
三、hregion
當表的大小超過設定值(hbase.hregion.max.filesize
)的時候,hbase會自動將表劃分為不同的區域,表是這些區域的集合,靠主鍵區分,每個區域即是乙個hregion,乙個region由[startkey,endkey)表示,不同的region會被master分配給相應的regionserver進行管理:
圖中有三個regionserver: rs1,rs2,rs3,表由主鍵被分割成幾個部分,分配給相應的regionserver管理,其中乙個regionserver可以管理不同的hregion。
四、hregionserver
hregionserver主要負責響應使用者i/o請求 ,向hdfs檔案系統中讀寫資料 ,是hbase中最核心的模組。
hregionserver內部管理了一系列hregion物件,每個hregion對應了table中的乙個region,hregion中由多個hstore組成。
hstore儲存是hbase儲存的核心了,其中由兩部分組成,一部分是memstore ,一部分是storefiles 。使用者寫入的資料首先會放入memstore,當memstore(大小由hbase.hregion.memstore.flush.size設定,預設64m )滿了以後會flush成乙個storefile(底層實現是hfile), 當storefile增長到一定閾值檔案數量(由hbase.hstore.blockingstorefiles設定,預設7個 ),會觸發compact合併操作,將多個storefiles合併成乙個storefile,合併過程中會進行版本合併和資料刪除,因此可以看出hbase其實只有增加資料,所有的更新和刪除操作都是在後續的compact過程中進行的,這使得使用者的寫操作只要進入記憶體中就可以立即返回 ,保證了hbase i/o的高效能。當storefiles compact後,會逐步形成越來越大的storefile,當單個storefile大小超過一定閾值(hbase.hregion.max.filesize,預設
256m
)後,會觸發split操作,同時把當前 region split成2個region,父region會下線,新split出的2個孩子region會被hmaster分配到相應的hregionserver 上,使得原先1個region的壓力得以分流到2個region上。
五、資料儲存格式
hbase中的所有資料檔案都儲存在hadoop hdfs檔案系統上,主要包括上述提出的兩種檔案型別:
1. hfile, hbase中keyvalue資料 的儲存格式,hfile是hadoop的二進位制格式檔案 ,實際上storefile就是對hfile做了輕量級包裝 ,即storefile底層就是hfile
2. hlog file,hbase中wal(write ahead log) 的儲存格式,物理上是hadoop的sequence file
Hadoop生態體系
1.hadoop的優勢 2.hdfs架構概述 3.yarn架構概述 4.mapreduce架構概述 mapreduce將計算過程分為兩個階段 map和reduce,如圖2 6所示。1 map階段並行處理輸入資料 2 reduce階段對map結果進行彙總 5.大資料技術生態體系 圖中涉及的技術名詞解釋...
Hadoop 生態體系
hadoop是乙個開源的大資料框架,是乙個分布式計算的解決方案。hadoop的兩個核心解決了資料儲存問題 hdfs分布式檔案系統 和分布式計算問題 mapre duce 舉例1 使用者想要獲取某個路徑的資料,資料存放在很多的機器上,作為使用者不用考慮在哪台機器上,hd fs自動搞定。舉例2 如果乙個...
HBase體系結構
hbase hbase是apache hadoop的資料庫,基於hdfs檔案系統 random,realtime read write access to big data 開源 分布式 可擴充套件 面向列 larger tables billions of rows x millions of c...