首頁 Java java教程 MapReduce原理

MapReduce原理

Jun 05, 2019 pm 02:15 PM
mapreduce

MapReduce是一種程式設計模型,用於大規模資料集(大於1TB)的平行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式程式語言裡借來的,還有從向量程式語言裡借來的特性。

MapReduce原理

它大大方便了程式設計人員在不會分散式並行程式設計的情況下,將自己的程式運行在分散式系統上。目前的軟體實作是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Reduce(歸約)函數,用來確保所有映射的鍵值對中的每一個共享相同的鍵組。

工作原理(推薦學習:Java影片教學)

#MapReduce執行流程

MapReduce原理上圖是論文裡給的流程圖。一切都是從最上方的user program開始的,user program連結了MapReduce函式庫,實作了最基本的Map函數和Reduce函數。圖中執行的順序都用數字標記了。

1.MapReduce函式庫先把user program的輸入檔分成M份(M為使用者定義),每份通常有16MB到64MB,如圖左方所示分成了split0~4;然後使用fork將使用者進程拷貝到叢集內其它機器上。

2.user program的副本中有一個稱為master,其餘稱為worker,master是負責調度的,為空閒worker分配作業(Map作業或Reduce作業),worker的數量也是可以由用戶指定的。

3.被分配了Map作業的worker,開始讀取對應分片的輸入數據,Map作業數量是由M決定的,和split一一對應;Map作業從輸入數據中抽取出鍵值對,每一個鍵值對都會作為參數傳遞給map函數,map函數產生的中間鍵值對被緩存在記憶體中。

4.快取的中間鍵值對會被定期寫入本機磁碟,而且被分成R個區,R的大小是由使用者定義的,將來每個區會對應一個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將訊息轉發給Reduce worker。

5.master通知分配了Reduce作業的worker它負責的分區在什麼位置(肯定不止一個地方,每個Map作業產生的中間鍵值對都可能映射到所有R個不同分區),當Reduce worker把所有它負責的中間鍵值對都讀過來後,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。因為不同的鍵可能會對應到同一個分區也就是同一個Reduce作業(誰讓分區少呢),所以排序是必須的。

6.reduce worker遍歷排序後的中間鍵值對,對於每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函數,reduce函數產生的輸出會加到這個分區的輸出文件中。

7.當所有的Map和Reduce作業都完成了,master喚醒正版的user program,MapReduce函數呼叫回傳user program的程式碼。

所有執行完畢後,MapReduce輸出放在了R個分區的輸出檔中(分別對應一個Reduce作業)。使用者通常並不需要合併這R個文件,而是將其作為輸入交給另一個MapReduce程式處理。整個過程中,輸入資料是來自底層分散式檔案系統(GFS)的,中間資料是放在本機檔案系統的,最終輸出資料是寫入底層分散式檔案系統(GFS)的。而且我們要注意Map/Reduce作業和map/reduce函數的差異:Map作業處理一個輸入資料的分片,可能需要呼叫多次map函數來處理每個輸入鍵值對;Reduce作業處理一個分區的中間鍵值對,期間要對每個不同的鍵呼叫一次reduce函數,Reduce作業最終也會對應一個輸出檔。

更多Java相關技術文章,請造訪Java開發教學欄位進行學習!

以上是MapReduce原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? 如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? 如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? 如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? 如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

See all articles