1. 程式人生 > >大資料05--圖示wordcount shuffle過程

大資料05--圖示wordcount shuffle過程

本文主要以wordcount為例詳細闡述shuffle的實現過程

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

二、執行map方法

 這個過程就是讀到每一行,切割字串,生成鍵值對寫出去。

三、shuffle操作(一)

這個過程是在有map任務的節點上完成的

1. partition

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

2. sort

對每一個組中的鍵值對根據鍵的雜湊碼排序。

3. combine

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

四、shuffle操作(二)

這個過程是在有reduce任務的節點上完成的。

1. 拉取partition

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

2. merge

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

3. sort

在每一臺reducer節點上,將新生成的鍵值對進行排序,根據 雜湊碼值。

五、reduce操作

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

六、檔案寫入HDFS

在每一臺reducer節點上將檔案寫入,實際上是寫成一個一個的檔案塊,但對外的表現形式是一整個大的結果檔案。