MapReduce運行機制



今天,我們來簡單地聊聊hadoop的MapReduce運行時的流程,爲了講解的方便,我這邊舉一個Couting words with hadoop 這個小程序來說明這個流程。
一、首先,我們編寫了統計單詞字母的小程序,打成jar 包,如wc-mr.jar 。 MapReduce計算框架是運行在集羣上面的。wc-mr.jar被複制並提交到集羣上面去(怎麼提交的?我後面會繼續寫文章說明,這裏先過)比如,提交到Node1,Node2和 Node3 這兩臺節點上。
二、集羣上的Node節點,這時有些會啓動MapTask進程,有些節點會啓動ReduceTask進程。當然一個機器上可以運行多個進程,所以也就意味着同一時刻在一臺Node節點上可能會有多個MapTask進程或ReduceTask進程。比如這裏Node1 和Node2 啓動了MapTask進程,Node3 啓動了ReduceTask進程。
三、MapTask進程會調用一個類叫RecordReader ,這個類會讀取我們的單詞文件(block信息),每次讀取一行;MapTask進程每調用一次RecordReader,它就會返回key-value值給MapTask進程,緊接着MapTask進程會調用我們wc-mr.jar的WordCountMapper.map()方法,並把key-value值傳遞過來,這裏會輸出一些內容。這是Node1上的,同樣在Node2流程也是一樣的,只是讀取的文件不同而已。
四、ReduceTask進程會通過shuffle機制去拿到所有的MapTask進程的輸出文件,同時調用我們的wc-mr.jar的WordCountReduce.reduc()方法,緊接着會Context.write()輸出數據,最終會往hdfs中持久化數據。

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