mapreduce作業的處理流程。
1.輸入分片(input split)
在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片(input split),每個輸入分片(input split)針對乙個map任務
輸入分片(input split)儲存的並非資料本身,而是乙個分片長度和乙個記錄資料的位置的陣列,輸入分片(input split)往往和hdfs的block(塊)關係很密切
假如我們設定hdfs的塊的大小是64mb,如果我們輸入有三個檔案,大小分別是3mb、65mb和127mb,那麼mapreduce會把3mb檔案分為乙個輸入分片(input split),65mb則是兩個輸入分片(input split)而127mb也是兩個輸入分片(input split),即我們如果在map計算前做輸入分片調整,例如合併小檔案,那麼就會有5個map任務將執行,而且每個map執行的資料大小不均,這個也是mapreduce優化計算的乙個關鍵點。
2.map階段:
程式設計師編寫好的map函式了,因此map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲存節點上進行
3.combiner階段:combiner階段是程式設計師可以選擇的,combiner其實也是一種reduce操作,因此我們看見wordcount類裡是用reduce進行載入的。
combiner是乙個本地化的reduce操作,它是map運算的後續操作,主要是在map計算出中間檔案前做乙個簡單的合併重複key值的操作,例如我們對檔案裡的單詞頻率做統計,map計算時候如果碰到乙個hadoop的單詞就會記錄為1,但是這篇文章裡hadoop可能會出現n多次,那麼map輸出檔案冗餘就會很多,因此在reduce計算前對相同的key做乙個合併操作,那麼檔案會變小,這樣就提高了寬頻的傳輸效率,畢竟hadoop計算力寬頻資源往往是計算的瓶頸也是最為寶貴的資源,但是combiner操作是有風險的,使用它的原則是combiner的輸入不會影響到reduce計算的最終輸入,
例如:如果計算只是求總數,最大值,最小值可以使用combiner,但是做平均值計算使用combiner的話,最終的reduce計算結果就會出錯。
4.shuffle階段:將map的輸出作為reduce的輸入的過程就是shuffle了
5.reduce階段和map函式一樣也是程式設計師編寫的,最終結果是儲存在hdfs上的。
Mapreduce作業的處理流程
按照時間順序包括 輸入分片 input split map階段 combiner階段 shuffle階段和 reduce階段 輸入分片 input split 在進行map計算之前,mapreduce會根據輸入檔案計算輸入分片 input split 每個輸入分片 input split 針對乙個m...
MapReduce的工作流
如何將資料處理問題轉化為mapreduce模型 資料處理問題更複雜,通常是因為有更多的mapreduce作業,而不是更複雜的map函式和reduce函式,換而言之,通常是增加更多的作業,而不是增加作業的複雜度。對於更複雜的問題,可考慮比mapreduce更高階的語言,例如pig hive spark...
MapReduce鏈結作業
對於簡單的分析程式,我們只需乙個mapreduce就能搞定,然而對於比較複雜的分析程式,我們可能需要多個job或者多個map或者reduce進行計算。下面我們來說說多個job或者多個mapreduce的程式設計形式 mapreduce的主要有以下幾種程式設計形式 1 迭代式mapreduce map...