MR的環形緩沖區(底層)

MapReduce的大致流程:

1、HDFS讀取數據;

2、按照規則進行分片,形成若干個spilt;

3、進行Map

4、打上分區標簽(patition)

5、數據入環形緩沖區(KVbuffer)

6、原地排序,并溢寫(sort+spill)

7、combiner+merge,落地到磁盤

8、shuffle到reduce緩存

9、繼續歸并排序(mergesotr)

10、reduce

11、輸出到HDFS

解剖環形緩沖區:

環形緩沖區解釋:環形緩沖區分為三塊,空閑區、數據區、索引區。初始位置取名叫做“赤道”,就是圓環上的白線那個位置。初始狀態的時候,數據和索引都為0,所有空間都是空閑狀態。

tips:這里有一個調優參數,可以設置環形緩沖區的大小:

mapreduce.task.io.sort.mb,默認100M,可以稍微設置大一些,但不要太大,因為每個spilt就128M。

個人理解:因為環形緩沖區底層是一個數組

1、首先發生溢出時,Map溢出的數據會轉成byte字節,從兩側開始向中間寫入,一側寫入數據,一側寫入記錄的索引信息。

2、當溢出的數據量達到mapreduce.map.sort.spill.percent參數設置的比例時(默認80%,這個是調優的參數)之后,會從剩余的20%空間中選出一個新的“赤道”,后續Map的溢出數據,將從新的赤道向兩側寫入,一側寫入數據,一側寫入記錄的索引信息。

3、第二次寫入剩余的20%同時,會將第一次寫入的數據進行刷寫到磁盤中,由此過程循環往復,同時完成溢入-寫出的過程,且在主線程mr執行過程中,會產生多次溢寫操作,每次溢寫都會產生溢寫文件,整個操作都在內存,形狀像一個環,所以才叫環形緩沖區。

4、完整實現圖

為什么要有環形緩沖區?

我們讀取到文件,直接排序,然后寫到HDFS里不就好了嗎?為啥還要整一個環形緩沖區呢?

那從架構的角度看環形緩沖區,他這么設計有什么用呢?解決什么問題呢?

思路廣的朋友應該已經反應過來了。環形緩沖區不需要重新申請新的內存,始終用的都是這個內存空間。大家知道MR是用java寫的,而Java有一個最討厭的機制就是Full GC。Full GC總是會出來搗亂,這個bug也非常隱蔽,發現了也不好處理。環形緩沖區從頭到尾都在用那一個內存,不斷重復利用,因此完美的規避了Full GC導致的各種問題,同時也規避了頻繁申請內存引發的其他問題。

另外呢,環形緩沖區同時做了兩件事情:1、排序;2、索引。在這里一次排序,將無序的數據變為有序,寫磁盤的時候順序寫,讀數據的時候順序讀,效率高非常多!

在這里設置索引區也是為了能夠持續的處理任務。每讀取一段數據,就往索引文件里也寫一段,這樣在排序的時候能加快速度。

更多的詳細信息你可以參考《Hadoop技術內幕:深入解析MapReduce架構設計與實現原理 》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解鎖STM32外設:開啟嵌入式開發新世界

???這里是小韓學長yyds的BLOG(喜歡作者的點個關注吧) ???想要了解更多內容可以訪問我的主頁 小韓學長yyds-CSDN博客 目錄 探索 STM32 強大的外設家族 初窺門徑:STM32 外設開發基礎 開發方式與工具 外設配置基礎步驟 深入剖析:常見外設應用實例…

大模型AI平臺DeepSeek 眼中的SQL2API平臺:QuickAPI、dbapi 和 Magic API 介紹與對比

目錄 1 QuickAPI 介紹 2 dbapi 介紹 3 Magic API 介紹 4 簡單對比 5 總結 統一數據服務平臺是一種低代碼的方式,實現一般是通過SQL能直接生成數據API,同時能對產生的數據API進行全生命周期的管理,典型的SQL2API的實現模式。 以下是針對…

人工智能之數學基礎:對線性代數中逆矩陣的思考?

本文重點 逆矩陣是線性代數中的一個重要概念,它在線性方程組、矩陣方程、動態系統、密碼學、經濟學和金融學以及計算機圖形學等領域都有廣泛的應用。通過了解逆矩陣的定義、性質、計算方法和應用,我們可以更好地理解和應用線性代數知識,解決各種實際問題。 關于逆矩陣的思…

[傻瓜式教學]如何將MathType公式編輯器內嵌到WPS工具欄中

[傻瓜式教學]如何將MathType公式編輯器內嵌到WPS工具欄中 將MathType公式編輯器內嵌到WPS工具欄中 下載好所需文件 我用夸克網盤分享了「mathtype安裝教程超簡單易上手.zip」,點擊鏈接即可保存。打開「夸克APP」 鏈接:https://pan.quark.cn/s/4726c684…

WPF框架---MvvmLight介紹

目錄 1. MvvmLight 框架準備 2. MvvmLight 中的相關基類 3. MvvmLight 中的數據綁定與通知 a. 核心功能 b. 關鍵方法與屬性 c. 完整示例 d. 高級用法 4. MvvmLight 中的命令對象 a. 命令對象的作用 b. 核心接口:ICommand c. MvvmLight 中的 RelayCommand…

【Linux】線程同步與互斥

線程同步與互斥 一.線程互斥1.互斥相關概念2.互斥鎖 Mutex3.互斥鎖接口4.互斥鎖實現原理5.互斥鎖封裝 二.線程同步1.同步相關概念2.條件變量 Condition Variable3.條件變量接口4.條件變量封裝5.信號量 Semaphore6.信號量接口7.信號量封裝8.生產者 - 消費者模型1.基于 Blocking …

URIError: URI malformed

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

linux c++11 gcc4 環境編譯安裝googletest/gtest v1.10

c11對應googletest/gtest 經過測試,c11對應版本是googletest v1.10.x 編譯安裝 編譯環境 sudo apt-get update sudo apt-get install -y build-essential cmake下載或git clone代碼 git clone https://github.com/google/googletest.git cd googletest git che…

鴻蒙與DeepSeek深度整合:構建下一代智能操作系統生態

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/north 目錄 技術融合背景與價值鴻蒙分布式架構解析DeepSeek技術體系剖析核心整合架構設計智能調度系統實現…

極狐GitLab 17.9 正式發布,40+ DevSecOps 重點功能解讀【二】

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

LeetCode - 28 找出字符串中第一個匹配項的下標

題目來源 28. 找出字符串中第一個匹配項的下標 - 力扣(LeetCode) 題目解析 暴力解法 本題如果采用暴力解法的話,可以定義兩個指針 i,j,其中 i 指針用于掃描 S(haystack)串,j 指針…

Spring Boot 異步編程

文章目錄 一、異步方法的使用1. 開啟異步支持2. 定義異步方法3. 調用異步方法踩坑記錄心得體會 二、線程池配置1. 自定義線程池2. 使用自定義線程池踩坑記錄心得體會 三、異步任務的監控與管理1. 日志記錄2. 異常處理3. 線程池監控踩坑記錄心得體會 在現代應用程序開發中&#…

0.大模型開發知識點需求綜述

文章目錄 一、機器學習與深度學習基礎二、自然語言處理(NLP)基礎三、大模型架構四、訓練優化技術五、數據處理與預處理六、分布式訓練與并行化策略七、微調方法與參數高效微調八、訓練框架、工具與自動化流程九、評估與部署十、前沿技術與未來趨勢 已更新…

docker目錄掛載與卷映射的區別

在 Docker 中,目錄掛載(Bind Mount)和卷映射(Volume Mount)的命令語法差異主要體現在路徑格式上,具體表現為是否以斜杠(/)開頭。以下是兩者的核心區別及使用場景的總結: …

[Java基礎-線程篇]7_線程設計模式與總結

摘要:懶漢單例模式怎么變得線程安全?Master-Worker歸并模式,工作竊取算法。Java線程相關源碼使用了什么設計模式? 資料引用:《Java高并發核心編程卷2》 目錄 線程安全的單例模式 Master-Worker模式 工作竊取算法 …

在【k8s】中部署Jenkins的實踐指南

🐇明明跟你說過:個人主頁 🏅個人專欄:《Kubernetes航線圖:從船長到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目錄 一、引言 1、Jenkins簡介 2、k8s簡介 3、什么在…

代碼隨想錄算法營Day59 | 尋找存在的路徑, 冗余連接,冗余連接II

尋找存在的路徑 這題使用并查集即可。并查集加路徑壓縮。 #include <iostream> using namespace std; int find(int* father,int u){return father[u] u ? u : father[u] find(father,father[u]); }bool isSame(int* father,int u,int v){return find(father,u) fi…

正則表達式(2)匹配規則

正則表達式的匹配規則定義了如何識別字符串中的特定模式。這些規則包括字符類匹配、元字符匹配、數量詞、字符轉義和分組。 字符類匹配 字符類匹配允許你指定一個字符集合&#xff0c;并匹配該集合中的任意單個字符。這是通過方括號 [] 來實現的。 簡單字符類&#xff1a;[abc…

【QWEN】機器人控制器的控制周期越短精度越高嗎

好的&#xff0c;用戶問的是“機器人控制器的控制周期越短精度越高嗎”。我需要根據提供的知識庫內容來回答這個問題。首先&#xff0c;我得回憶一下知識庫里的相關信息。 知識庫里有幾篇相關的文章。比如&#xff0c;[3]提到控制周期越短&#xff0c;控制性能的上限越高&…

[總概]Vue2/3React Diff算法

根據搜索結果,大部分文檔都詳細描述了Vue的Diff算法原理、優化策略以及實現細節。例如,網頁1詳細介紹了Vue Diff算法的核心設計,包括雙端比較和key的作用;Vue3中的快速Diff算法; 通常,解釋一個算法可以從其基本原理、核心策略、優化手段、源碼實現以及應用場景等方面展開…