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