MapReduce执行过程
生活随笔
收集整理的這篇文章主要介紹了
MapReduce执行过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Mapper任務的執行過程:
- 第一階段是把輸入文件按照一定的標準分片(InputSplit),每個輸入片的大小是固定的。默認情況下,輸入片(InputSplit)的大小與數據塊(Block)的大小是相同的。如果數據塊(Block)的大小是默認值64MB,輸入文件有兩個,一個是32MB,一個是72MB。那么小的文件是一個輸入片,大文件會分為兩個數據塊,那么是兩個輸入片。一共產生三個輸入片。每一個輸入片由一個Mapper進程處理。這里的三個輸入片,會有三個Mapper進程處理。
- 第二階段是對輸入片中的記錄按照一定的規則解析成鍵值對。有個默認規則是把每一行文本內容解析成鍵值對。“鍵”是每一行的起始位置(單位是字節),“值”是本行的文本內容。
- 第三階段是調用Mapper類中的map方法。第二階段中解析出來的每一個鍵值對,調用一次map方法。如果有1000個鍵值對,就會調用1000次map方法。每一次調用map方法會輸出零個或者多個鍵值對。
- 第四階段是按照一定的規則對第三階段輸出的鍵值對進行分區。比較是基于鍵進行的。比如我們的鍵表示省份(如北京、上海、山東等),那么就可以按照不同省份進行分區,同一個省份的鍵值對劃分到一個區中。默認是只有一個區。分區的數量就是Reducer任務運行的數量。默認只有一個Reducer任務。
- 第五階段是對每個分區中的鍵值對進行排序。首先,按照鍵進行排序,對于鍵相同的鍵值對,按照值進行排序。比如三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。那么排序后的結果是<1,3>、<2,1>、<2,2>。如果有第六階段,那么進入第六階段;如果沒有,直接輸出到本地的linux文件中。
- 第六階段是對數據進行歸約處理,也就是reduce處理。鍵相等的鍵值對會調用一次reduce方法。經過這一階段,數據量會減少。歸約后的數據輸出到本地的linxu文件中。本階段默認是沒有的,需要用戶自己增加這一階段的代碼。
Reducer任務的執行過程
- 第一階段是Reducer任務會主動從Mapper任務復制其輸出的鍵值對。Mapper任務可能會有很多,因此Reducer會復制多個Mapper的輸出。
- 第二階段是把復制到Reducer本地數據,全部進行合并,即把分散的數據合并成一個大的數據。再對合并后的數據排序。
- 第三階段是對排序后的鍵值對調用reduce方法。鍵相等的鍵值對調用一次reduce方法,每次調用會產生零個或者多個鍵值對。最后把這些輸出的鍵值對寫入到HDFS文件中。
-
在整個MapReduce程序的開發過程中,最大的工作量是覆蓋map函數和覆蓋reduce函數。
----------------------------------------------------------------------------
map
? ? ?1.讀取輸入文件,解析成<k,v>,每個<k,v>調用一次map
? ? ?2.map()
? ? ?3.分區(默認1)
? ? ?4.排序、分組(shuffle)
? ? ?5.規約(combine可選)
reduce
1.網絡copy
? ? ? 2.reduce()(先排序)
3.輸出
轉載于:https://www.cnblogs.com/mlj5288/p/4449716.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的MapReduce执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 整理记录个人面试问题
- 下一篇: js 乘法除法精度问题