大家好,我是不溫卜火,是一名計算機學院大數據專業大二的學生,暱稱來源於成語—
不溫不火
,本意是希望自己性情溫和
。作爲一名互聯網行業的小白,博主寫博客一方面是爲了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處於起步階段的萌新。但由於水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://buwenbuhuo.blog.csdn.net/
此篇爲大家帶來的是Hbase原理。
一. HBase的數據讀取流程
如果上圖過程不是很懂,下面博主再製作一幅圖供大家理解
- 1.Client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的數據。meta中又存儲了用戶表的region信息;
- 2.根據namespace、表名和rowkey在meta表中找到對應的region信息;
- 3.找到這個region對應的regionserver;
- 4.查找對應的region;
- 5.先從MemStore找數據,如果沒有,再到BlockCache裏面讀;
- 6.BlockCache還沒有,再到StoreFile上讀(爲了讀取的效率);
- 7.
如果是從StoreFile裏面讀取的數據,不是直接返回給客戶端,而是先寫入BlockCache,再返回給客戶端
。
二. RegionServer 架構
- 1.StoreFile
保存實際數據的物理文件,StoreFile以Hfile的形式存儲在HDFS上。每個Store會有一個或多個StoreFile(HFile),數據在每個StoreFile中都是有序的。
- 2.MemStore
寫緩存,由於HFile中的數據要求是有序的,所以數據是先存儲在MemStore中,排好序後,等到達刷寫時機纔會刷寫到HFile,每次刷寫都會形成一個新的HFile。
- 3.WAL
由於數據要經MemStore排序後才能刷寫到HFile,但把數據保存在內存中會有很高的概率導致數據丟失,爲了解決這個問題,數據會先寫在一個叫做Write-Ahead logfile的文件中,然後再寫入MemStore中。所以在系統出現故障的時候,數據可以通過這個日誌文件重建。
- 4.BlockCache
讀緩存,每次查詢出的數據會緩存在BlockCache中,方便下次查詢。
二. HBase的數據的寫入流程
如果上圖過程不是很懂,下面博主再製作一幅圖供大家理解
- 1.Client向HregionServer發送寫請求;
- 2.HregionServer將數據寫到HLog(write ahead log)。爲了數據的持久化和恢復;
- 3.HregionServer將數據寫到內存(MemStore);
- 4.反饋Client寫成功。
三. 數據Flush過程
- 1.當MemStore數據達到閾值(默認是128M,老版本是64M),將數據刷到硬盤,將內存中的數據刪除,同時刪除HLog中的歷史數據;
- 2.並將數據存儲到HDFS中;
- 3.在HLog中做標記點。
四. 數據合併過程
- 1.當數據塊達到4塊,Hmaster觸發合併操作,Region將數據塊加載到本地,進行合併;
- 2.當合並的數據超過256M,進行拆分,將拆分後的Region分配給不同的HregionServer管理;
- 3.當HregionServer宕機後,將HregionServer上的hlog拆分,然後分配給不同的HregionServer加載,修改.META.;
- 4.注意:HLog會同步到HDFS。
本次的分享就到這裏了,
好書不厭讀百回,熟讀課思子自知。而我想要成爲全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論”“收藏”
一鍵三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
碼字不易,大家的支持就是我堅持下去的動力。點贊後不要忘了關注
我哦!