溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase架構是怎么樣的

發(fā)布時間:2021-12-09 10:12:07 來源:億速云 閱讀:156 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了HBase架構是怎么樣的,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

聊完場景和數(shù)據(jù)模型我們來說下HBase的架構,在網(wǎng)上找了張比較清晰的圖,我覺得這張圖能說明很多問題,那這一篇我們就重點來解析下這張圖

HBase架構是怎么樣的

角色與職責

先介紹下上圖中的幾個角色和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

RegionServer

圖里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ù): 我們來沿用下上一篇的那個表:

HBase架構是怎么樣的

如表

假設這張表有幾萬行,一行就代表一萬行,那可能A和B可能是屬于RegionA,C和D可能是屬于RegionB,

RegionA和RegionB可能分布在不同的RegionServer上,

可見,RegionA有兩個列族,CF1和CF2,

即它有兩個Store,

即在HDFS上有兩個目錄分別用于存放CF1和CF2,

即CF1和CF2在內存里也分別各對應了一個MemStore

讀寫

這里先講個大概,后面的文章我會每一步詳細分析,比如region的分裂過程,StoreFile的合并過程,rowkey的定位詳細流程等等,歡迎持續(xù)關注。

Region定位流程:

  • Zookeeper:記錄了.META.表的位置。(1.X之后的版本廢除了-ROOT-表

  • .META.:根據(jù)給定的key找到RegionServer。.META.記錄所有的用戶空間region列表,以及RegionServer的服務器地址。

寫流程

  1. 向zookeeper發(fā)起請求,從ROOT表中獲得META所在的region,再根據(jù)table,namespace,rowkey,去meta表中找到目標數(shù)據(jù)對應的region信息以及regionserver

  2. 把數(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

讀流程

  1. 從zookeeper獲得root表所在region位置

  2. 根據(jù)table,namespace,rowkey去root表中獲得meta表所在region位置

  3. 根據(jù)table,namespace,rowkey去meta表中獲得這條記錄所在regionserver

  4. 首先檢查請求的數(shù)據(jù)是否在Memstore,寫緩存未命中的話再到讀緩存(blockCache)中查找,讀緩存還未命中才會到HFile文件中查找,最終返回merged的一個結果給用戶

  5. client端會對數(shù)據(jù)塊緩存

數(shù)據(jù)flush過程

  1. 當memstore數(shù)據(jù)達到閾值(默認是64M),將數(shù)據(jù)刷到硬盤,將內存中的數(shù)據(jù)刪除同時刪除Hlog中的歷史數(shù)據(jù)。

  2. 并將數(shù)據(jù)存儲到hdfs中。

  3. 在hlog中做標記點。

數(shù)據(jù)合并過程

  1. 當數(shù)據(jù)塊達到4塊,hmaster將數(shù)據(jù)塊加載到本地,進行合并

  2. 當合并的數(shù)據(jù)超過256M,進行拆分,將拆分后的region分配給不同的hregionserver管理

  3. 當hregionser宕機后,將hregionserver上的hlog拆分,然后分配給不同的hregionserver加載,修改.META.

  4. 注意:hlog會同步到hdfs


感謝你能夠認真閱讀完這篇文章,希望小編分享的“HBase架構是怎么樣的”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI