HBase權威指南,架構 儲存

2021-09-18 05:03:00 字數 3594 閱讀 4583

hbase 主要處理兩種檔案:一種是預寫日誌(write-ahead log,wal),另一種是實際的資料檔案。這兩種檔案主要由 hregionserver 管理。

乙個基本的流程是客戶端首先聯絡 zookeeper 子集群(quorum)查詢行鍵,通過 zookeeper 獲取含有 -root- 的 region 伺服器,通過 -root- region 伺服器可以查詢到含有 .meta. 表的 region 伺服器,最終,通過查詢 .meta. 伺服器來獲取客戶端查詢的行鍵資料所在的 region 伺服器。

在啟動 hbase 時,hmaster 負責將所有 region 分配到 hregion server 上,其中也包括特別的 -root- 和 .meta. 表。

hregionserver 負責開啟 region,並建立對應的 hregion 例項。當 hregion 被開啟後,它會為每個表的 hcolumnfamily 建立乙個 store 例項,這些列族是使用者之前建立表時定義的。每個 store 例項包含乙個或多個 storefile 例項,它們是實際資料儲存檔案 hfile 的輕量級封裝。每個 store 還有其對應的乙個 memstore,乙個 hregionserver 分享了乙個 hlog 例項。

當使用者向 hregionserver 發起 htable.put(put) 請求時,其會將請求交給對應的 hregion 例項來處理。

第一步要決定資料是否需要寫到由 hlog 類實現的預寫日誌中。一旦資料被寫入到 wal 中,資料就會被防到 memstore 中,同時還會檢查 memstore 是否已經滿了,如果滿了,就會被請求刷寫到磁碟中去。刷寫請求由另外乙個 hregionserver 的執行緒處理,它會把資料寫到 hdfs 中的乙個新 hfile。

另外,關閉 region 伺服器會強制所有的 memstore 被刷寫到磁碟。

hbase 使用乙個 hdfs 中可配置的根目錄,預設設為 "/hbase"。

$hadoop_home/bin/hadoop dfs -lsr /hbase

0 /hbase/.logs

0 /hbase/.logs/foo.internal,60020,1309812147645

0 /hbase/.logs/foo.internal,60020,1309812147645/

foo.internal%2c60020%2c1309812147645.1309812151180

0 /hbase/.oldlogs

38 /hbase/hbase.id

3 /hbase/hbase.version

0 /hbase/testtable

487 /hbase/testtable/.tableinfo

0 /hbase/testtable/.tmp

0 /hbase/testtable/1d562c9c4d3b8810b3dbeb21f5746855

0 /hbase/testtable/1d562c9c4d3b8810b3dbeb21f5746855/.oldlogs

124 /hbase/testtable/1d562c9c4d3b8810b3dbeb21f5746855/.oldlogs/

hlog.1309812163957

282 /hbase/testtable/1d562c9c4d3b8810b3dbeb21f5746855/.regioninfo

0 /hbase/testtable/1d562c9c4d3b8810b3dbeb21f5746855/.tmp

檔案可以被分為兩類,一類位於 hbase 根目錄下,另一類位於根目錄中的表目錄下。

根級檔案

第一組檔案是被 hlog 例項管理的 wal 檔案,這些日誌檔案被建立在 hbase 的根目錄下乙個名為 .logs 的目錄下。對於每個 hregionserver,日誌目錄中都包含乙個對應的子目錄。在每個子目錄中有多個 hlog 檔案。乙個 region 伺服器的所有 region 共享同一組 hlog 檔案。

當所有包含的修改都被持久化到儲存檔案中,從而不需要日誌檔案時,它們會被防到 hbase 根目錄下的 .oldlogs 目錄下。在 10 分鐘後,舊的日誌檔案將被 maser 刪除。

hbase.id 和 habse.version 檔案包含集群的唯一 id 和檔案格式版本資訊。

表級檔案

在 hbase 中,每張表都有自己的目錄,其位於檔案系統中 hbase 根目錄下。每張表目錄包括乙個名為 .tableinfo 的頂層檔案,其中包括表和列族的定義。.tmp 目錄中包含一些臨時資料。

region 級檔案

region 目錄中也有乙個 .regioninfo 檔案,這個檔案包含了對應 region 的 hregioninfo 例項序列化後的資訊。與 .tableinfo 檔案類似,它能被外部工具用來檢視 region 的相關資訊。

region 拆分

乙個 region 超過了配置中 region 大小的最大值,region 就需要拆分,其會建立乙個對應的 splitis 目錄,它被用來臨時存放兩個字 region 相關的資料。

合併

隨著 memstore 的刷寫會生成很多磁碟檔案。如果檔案的數目達到閾值,合併過程將把它們合併成數量更少的體積更大的檔案。這個過程持續到這些檔案最大的檔案超過配置的最大儲存檔案大小,此時會觸發乙個 region 拆分。

壓縮合併有兩種,即 minor 和 major。minor 合併負責重寫最後生成的幾個檔案到乙個更大的檔案中。major 合併將所有檔案壓縮成乙個單獨的檔案。在執行壓縮檢查時,系統自動決定執行哪種合併。

實際的儲存檔案功能是由 hfile 類實現的,它被專門建立以達到乙個目的:有效地儲存 hbase 的資料。

這些檔案是可變長度的,唯一固定的塊是 file info 塊和 trailer 塊。index 塊記錄 data 和 meta 塊的偏移量。每個塊都包含乙個 magic 頭部和一定數量的序列化的 keyvalue 例項。

hbase 儲存檔案的塊與 hadoop 的塊之間沒有匹配關係。事實上,這兩種塊型別之間根本沒有相關性。

本質上,hfile 中的每個 keyvalue 都是乙個低階的位元組陣列,它允許零複製訪問資料。

該結構以兩個分布表示鍵長度(key lengh)和值長度(value lengh)的定義數字開始。

hadoop 權威指南 HBase

hbase原理 基本概念 基本架構 應用將資料儲存在帶標籤的表中,表的單元格是行和列座標的座標交集,他們有版本號。在預設情況下版本號是單元格插入時hbase自動分配的時間戳。表的單元格內容是乙個未解釋的位元組陣列 錶行的鍵也是位元組陣列。行鍵是表的主鍵,被用來對錶行進行排序。錶行的列分組,形成列族 ...

《HBase權威指南》一導讀

hbase權威指南 你閱讀本書的理由可能有很多。可能是因為聽說了hadoop,並了解到它能夠在合理的時間範圍內處理pb級的資料,在研讀hadoop的過程中發現了乙個處理隨機讀寫的系統,它叫做hbase。或者將其稱為目前流行的一種新的資料儲存架構,傳統資料庫解決大資料問題時成本更高,更適合的技術範圍是...

《HBase權威指南》學習筆記

gfs 集群儲存海量資料,資料在節點間冗餘複製,即使一台儲存伺服器發生故障,也不會影響可用性。gfs的缺點 適合儲存少許非常大的檔案,而不適合儲存大量小檔案,因為檔案的元資料資訊儲存在主節點的記憶體中,檔案越多主節點壓力越大。bigtable rdbms在大規模處理中有缺點,可以摒棄關係型的特點,採...