MapReduce原理之ReduceTask工作機制
阿新 • • 發佈:2019-01-25
1.設定ReduceTask並行度(個數) reducetask的並行度同樣影響整個job的執行併發度和執行效率,但與maptask的併發數由切片數決定不同,Reducetask數量的決定是可以直接手動設定: //預設值是1,手動設定為4 job.setNumReduceTasks(4);2.注意(1)reducetask=0 ,表示沒有reduce階段,輸出檔案個數和map個數一致。 (2)reducetask預設值就是1,所以輸出檔案個數為一個。(3)如果資料分佈不均勻,就有可能在reduce階段產生資料傾斜(4)reducetask數量並不是任意設定,還要考慮業務邏輯需求,有些情況下,需要計算全域性彙總結果,就只能有1個reducetask。(5)具體多少個reducetask,需要根據叢集效能而定。(6)如果分割槽數不是1,但是reducetask為1,是否執行分割槽過程。答案是:不執行分割槽過程。因為在maptask的原始碼中,執行分割槽的前提是先判斷reduceNum個數是否大於1。不大於1肯定不執行。3.實驗:測試reducetask多少合適。(1)實驗環境:1個master節點,16個slave節點:CPU:8GHZ,記憶體: 2G(2)實驗結論: 由上面的測試結果可知:當Maptask和Reducetask的相等或接近的時候,MR的工作效率最高。4.ReduceTask工作機制
(1)Copy階段:ReduceTask從各個MapTask上遠端拷貝一片資料,並針對某一片資料,如果其大小超過一定閾值,則寫到磁碟上,否則直接放到記憶體中。 (2)Merge階段:在遠端拷貝資料的同時,ReduceTask啟動了兩個後臺執行緒對記憶體和磁碟上的檔案進行合併,以防止記憶體使用過多或磁碟上檔案過多。 (3)Sort階段:按照MapReduce語義,使用者編寫reduce()函式輸入資料是按key進行聚集的一組資料。為了將key相同的資料聚在一起,Hadoop採用了基於排序的策略。由於各個MapTask已經實現對自己的處理結果進行了區域性排序,因此,ReduceTask只需對所有資料進行一次歸併排序即可。 (4)Reduce階段:reduce()函式將計算結果寫到HDFS上。
(1)Copy階段:ReduceTask從各個MapTask上遠端拷貝一片資料,並針對某一片資料,如果其大小超過一定閾值,則寫到磁碟上,否則直接放到記憶體中。 (2)Merge階段:在遠端拷貝資料的同時,ReduceTask啟動了兩個後臺執行緒對記憶體和磁碟上的檔案進行合併,以防止記憶體使用過多或磁碟上檔案過多。 (3)Sort階段:按照MapReduce語義,使用者編寫reduce()函式輸入資料是按key進行聚集的一組資料。為了將key相同的資料聚在一起,Hadoop採用了基於排序的策略。由於各個MapTask已經實現對自己的處理結果進行了區域性排序,因此,ReduceTask只需對所有資料進行一次歸併排序即可。 (4)Reduce階段:reduce()函式將計算結果寫到HDFS上。