WordCount程序中隱藏的祕密

MR具體流程如下:

     1)文件拆分成splits,這一步由MapReduce框架自動完成,其中偏移量(即key值)包括了回車所佔的字符數和Linux環境有關。


       2)將分割好的對交給用戶定義的map方法進行處理,生成新的對。


       2.5)得到map方法輸出的對後,先進行分區

    

(ps:自己添加的圖,後面的排序沒有改)

       3)得到map方法輸出的對後,Mapper會將它們按照key值進行排序,並執行Combine過程,將key至相同value值累加,得到Mapper的最終輸出結果。



2、Map Task的整體流程,可以概括爲5個步驟:

         1)Read:Map Task通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value

         2)Map:該階段主要將解析出的key/value交給用戶編寫的map()函數處理,併產生一系列的key/value。

         3)Collect:在用戶編寫的map()函數中,當數據處理完成後,一般會調用OutputCollector.collect()輸入結果。在該函數內部,它會將生成的key/value分片(通過Partitioner),並寫入一個環形內存緩衝區中。

        4)Spill:即“溢寫”,當環形緩衝區滿後,MapReduce會將數據寫到本地磁盤上,生成一個臨時文件。將數據寫入本地磁盤之前,先要對數據進行一次本地排序,並在必要時對數據進行合併,壓縮等操作。

        5)Combine:當所有數據處理完成後,Map Task對所有臨時文件進行一次合併,以確保最終只會生成一個數據文件。


3、Reduce的整體流程,可以概括爲5個步驟:

        1)Shuffle:也稱Copy階段。Reduce Task從各個Map Task上遠程拷貝一片數據,並針對某一片數據,如果其大小超過一定閥值,則寫到磁盤上,否則直接放到內存中。

        2)Merge:在遠程拷貝的同時,Reduce Task啓動了兩個後臺線程對內存和磁盤上的文件進行合併,以防止內存使用過多或者磁盤上文件過多。

        3)Sort:按照MapReduce語義,用戶編寫的reduce()函數輸入數據是按key進行聚集的一組數據。爲了將key相同的數據聚在一 起,Hadoop採用了基於排序的策略。由於各個Map Task已經實現了對自己的處理結果進行了局部排序,因此,Reduce Task只需對所有數據進行一次歸併排序即可。

        4)Reduce:在該階段中,Reduce Task將每組數據依次交給用戶編寫的reduce()函數處理。

        5)Write:reduce()函數將計算結果寫到HDFS。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章