您好,登錄后才能下訂單哦!
這篇文章主要介紹了HBase架構是怎么樣的,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
聊完場景和數據模型我們來說下HBase的架構,在網上找了張比較清晰的圖,我覺得這張圖能說明很多問題,那這一篇我們就重點來解析下這張圖
先介紹下上圖中的幾個角色和Ta們的職責:
1.HMaster
為Region server分配region;
負責Region server的負載均衡;
發現失效的Region server并重新分配其上的region;
處理schema更新請求
2.Client
Client包含訪問HBase的接口,并維護cache(region的位置信息)來加快對HBase的訪問
3.Zookeeper
在之前的Zookeeper篇講過HBase和Zookeeper的聯系,忘記地同學可以去翻一下。
HMaster的HA
regionserver狀態信息
存root表(用于記錄.META.表所在的regionServer,該表只會有一個regionServer)
存儲HBase的schema和table元數據
發現失效的Region,借助HMaster分配region
4.HRegionSever
即一臺服務器,擁有一個到多個HRegion
圖里HRegionServer里面的內容很多,大家可能會看得有點懵,我們來詳細說下這個HRegionServer里面的東西。
HRegionServer 包含 (1+)個 Region
一個 HRegionServer 包含一到多個Region,而Region就是一張HBase表按一定閾值橫向切割的一部分。
Region按大小分割的,每個表開始只有一個region,隨著數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;
Region是Hbase中分布式存儲和負載均衡的最小單元,不同Region分布到不同RegionServer上;
Region 包含 (1+)個 Store = columns family 列族個數
Region由一個或者多個Store組成,每個store保存一個columns family;
Store 是一個抽象的概念就是一個存儲,它的個數和HDFS上的存儲目錄個數是一致的,而一個存儲目錄對應的就是一個columns family列族。
Store 包含(1)個 MemStore +(0+)個 StoreFile
Store 上面說了就是一個存儲,他包含了一個內存的存儲和0+個文件存儲,一個Store的所有文件都存在一個目錄下,這個目錄下的所有文件對應的是一個列族。 注意:
StoreFile是實際存儲數據的。是HFile的輕量級包裝。
StoreFile達到閾值個數(4)會進行合并;
一個StoreFile達到閾值大小會進行分裂;
分裂后由hmaster分配到不同region起到負載均衡作用(若出現hot region可以手動拆分)
上面說得可能有點抽象,我們來看具體的數據: 我們來沿用下上一篇的那個表:
如表:
假設這張表有幾萬行,一行就代表一萬行,那可能A和B可能是屬于RegionA,C和D可能是屬于RegionB,
RegionA和RegionB可能分布在不同的RegionServer上,
可見,RegionA有兩個列族,CF1和CF2,
即它有兩個Store,
即在HDFS上有兩個目錄分別用于存放CF1和CF2,
即CF1和CF2在內存里也分別各對應了一個MemStore
這里先講個大概,后面的文章我會每一步詳細分析,比如region的分裂過程,StoreFile的合并過程,rowkey的定位詳細流程等等,歡迎持續關注。
Zookeeper:記錄了.META.表的位置。(1.X之后的版本廢除了-ROOT-表)
.META.:根據給定的key找到RegionServer。.META.記錄所有的用戶空間region列表,以及RegionServer的服務器地址。
向zookeeper發起請求,從ROOT表中獲得META所在的region,再根據table,namespace,rowkey,去meta表中找到目標數據對應的region信息以及regionserver
把數據分別寫到HLog和MemStore上一份 MemStore達到一個閾值后則把數據刷成一個StoreFile文件。若MemStore中的數據有丟失,則可以總HLog上恢復 當多個StoreFile文件達到一定的大小后,會觸發Compact合并操作,合并為一個StoreFile,這里同時進行版本的合并和數據刪除。 當Compact后,逐步形成越來越大的StoreFIle后,會觸發Split操作,把當前的StoreFile分成兩個,這里相當于把一個大的region分割成兩個region
從zookeeper獲得root表所在region位置
根據table,namespace,rowkey去root表中獲得meta表所在region位置
根據table,namespace,rowkey去meta表中獲得這條記錄所在regionserver
首先檢查請求的數據是否在Memstore,寫緩存未命中的話再到讀緩存(blockCache)中查找,讀緩存還未命中才會到HFile文件中查找,最終返回merged的一個結果給用戶
client端會對數據塊緩存
當memstore數據達到閾值(默認是64M),將數據刷到硬盤,將內存中的數據刪除同時刪除Hlog中的歷史數據。
并將數據存儲到hdfs中。
在hlog中做標記點。
當數據塊達到4塊,hmaster將數據塊加載到本地,進行合并
當合并的數據超過256M,進行拆分,將拆分后的region分配給不同的hregionserver管理
當hregionser宕機后,將hregionserver上的hlog拆分,然后分配給不同的hregionserver加載,修改.META.
注意:hlog會同步到hdfs
感謝你能夠認真閱讀完這篇文章,希望小編分享的“HBase架構是怎么樣的”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。