8.wordcount詳解shuffle機制

本文主要以wordcount為例詳細闡述shuffle的實現(xiàn)過程

一、map方法執(zhí)行之前

image

我們知道,HDFS里的文件是分塊存放在Datanode上面的,而我們寫的mapper程序也是跑在各個節(jié)點上的。這里就涉及到一個問題,哪一個節(jié)點上的mapper讀哪一些節(jié)點上的文件塊呢?hadoop會自動將這個文件分片(split),得到好多split,這每一個split放到一個節(jié)點的一個mapper里面去讀。然后在每一臺有mapper任務(wù)的節(jié)點上都執(zhí)行了這么一個操作,將分得到的split切割成一行一行的鍵值對,然后傳給map方法。鍵是這每一行在split中的偏移量,值是每一行得到的字符串。

二、執(zhí)行map方法

image

寫過wordcount的朋友都知道,這個過程就是讀到每一行,切割字符串,生成鍵值對寫出去。

三、shuffle操作(一)

這個過程是在有map任務(wù)的節(jié)點上完成的

image

1. partition

將得到的鍵值對按照一定的規(guī)則分組,例如例子中將首字母為a的全部分到一組,將首字母為b的分到一組。這里只是為了講明白這個方式,進行了過程簡化,實際不一定是分為兩組,也不一定是按照首字母分組。

2. sort

對每一個組中的鍵值對根據(jù)鍵的哈希碼排序。

3. combine

將具有相同鍵的鍵值對合成一個新的鍵值對,這個新的鍵值對的鍵是原來的鍵,鍵值是所有鍵的鍵值之和。

四、shuffle操作(二)

這個過程是在有reduce任務(wù)的節(jié)點上完成的。

image

1. 拉取partition

hadoop決定有多少個reducer的時候會規(guī)定有多少個partition,每一個reducer拉取自己要處理的那個分組的全部成員。例如,某臺節(jié)點要處理所有以a開頭的鍵值對,它就會將所有mapper中的以a開頭的那一組全部拉取過來。

2. merge

在每一個reducer上,將具有相同鍵的鍵值對生成另外一個新的鍵值對,鍵是以前的鍵,鍵值是一個以前鍵值的集合。

3. sort

在每一臺reducer節(jié)點上,將新生成的鍵值對進行排序,根據(jù) 哈希碼值。

五、reduce操作

image

寫過wordcount的朋友都知道,在reduce方法中,hadoop回傳過來一個一個的鍵值對,鍵是每一個單詞,鍵值就是四中新生成的鍵值對的鍵值。執(zhí)行reduce操作,就是將每一個鍵值對中的鍵值累加起來。然后以鍵值對的形式將結(jié)果寫出去。

六、文件寫入HDFS

image

在每一臺reducer節(jié)點上將文件寫入,實際上是寫成一個一個的文件塊,但對外的表現(xiàn)形式是一整個大的結(jié)果文件。

謝謝

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容