MapReduce的個人理解

2021-08-17 11:24:09 字數 817 閱讀 4260

mapreduce作為乙個平行計算框架,mr一共分為三個部分分別是map->shuffle->reduce,我們就從這三個步驟來理解mapreduce。

1.map端

hadoop將mapreduce的輸入資料分成等長的資料塊,這個過程叫做input split也就是分片,然後為每乙個分片分配乙個map任務,然後通過使用者自己定義的邏輯來處理這些分片裡的資料,這裡就有乙個問題,分片的大小應該是多大的呢,一般認為split的大小應該趨向於hdfs中乙個block的大小,因為hadoop在存有輸入資料的節點上執行map任務,可以獲得最佳的效能(這樣可以不占用節點之間的頻寬資源也就是傳說中的資料本地化優化)。輸入完資料後,資料按照使用者定義的邏輯辦成了乙個乙個的對,然後向reduce端輸入。

2.shuffle過程

shuffle可以說是mapreduce的靈魂所在。我們來看一下shuffle的過程。map端不停地輸出對,這時就有乙個問題出現了,他們這些對要去**呢,map的中間過程需要reduce處理後才是最終結果,所以將中間過程儲存到hdfs中顯得有點小題大做,所以它們就需要乙個去處,這個去處就是本地磁碟,每個map任務都有乙個環形記憶體緩衝區用於儲存map的輸出,這個緩衝區預設的大小是100mb,可是如果map的輸出大於100mb怎麼辦呢,這就需要設定乙個閾值(通常是80%),一旦環形記憶體緩衝區儲存的資料到達閾值,乙個後台的執行緒就會開始把內容溢位到磁碟中。並且在溢位的過程中,map持續向緩衝區中寫入資料。在寫入磁碟之前,執行緒首先會根據資料最終要傳的reducer來把資料劃分成相應的分割槽(partition),在乙個分割槽中,執行緒會按照鍵進行記憶體中的排序,然後reducer通過http來獲得map輸出檔案的分割槽。

3.reduce過程

關於MapReduce的理解?

來自知乎 其實我們可以從word count這個例項來理解mapreduce。mapreduce大體上分為六個步驟 input,split,map,shuffle,reduce,output。細節描述如下 輸入 input 如給定乙個文件,包含如下四行 2.拆分 split 將上述文件中每一行的內容...

理解MapReduce操作

1.用python編寫wordcount程式並提交任務 程式wordcount 輸入乙個包含大量單詞的文字檔案 輸出檔案中每個單詞及其出現次數 頻數 並按照單詞字母順序排序,每個單詞和其頻數佔一行,單詞和頻數之間有間隔 編寫map函式,reduce函式 usr bin env python impo...

深入理解MapReduce

化簡 reducing 遍歷集合中的元素來返回乙個綜合的結果。即,輸出表單裡一列數字的和這個任務屬於reducing。input,資料讀入 123456 設定資料輸入 fileinputformat.setinputpaths job,args 0 fileinputformat.setinputd...