ok,看到這裡時,大家可以先停下來想想,如果是自己來設計這段shuffle過程,那麼你的設計目標是什麼。我想能優化的地方主要在於減少拉取資料的量及盡量使用記憶體而不是磁碟。
我的分析是基於hadoop0.21.0的原始碼,如果與你所認識的shuffle過程有差別,不吝指出。我會以wordcount為例,並假設它有8個map task和3個reduce task。從上圖看出,shuffle過程橫跨map與reduce兩端,所以下面我也會分兩部分來展開。
先看看map端的情況,如下圖:
hadoop的shuffle和排序
1.1 maptask執行內部原理 當map task開始運算,並產生中間資料時,其產生的中間結果並非直接就簡單的寫入磁碟。這中間的過程比較複雜,並且利用到了記憶體buffer來進行已經產生的部分結果的快取,並在記憶體buffer中進行一些預排序來優化整個map的效能。如上圖所示,每乙個map都會對...
hadoop執行原理之shuffle
hadoop的核心思想是mapreduce,但shuffle又是mapreduce的核心。shuffle的主要工作是從map結束到reduce開始之間的過程。首先看下這張圖,就能了解shuffle所處的位置。圖中的partitions copy phase sort phase所代表的就是shuff...
Hadoop中shuffle詳細過程
map 的執行結果會被 outercollector 元件收集,outercollector 會將資料寫入環形緩衝區內,進行資料寫入的時候根據map輸出的 key生成乙個分割槽號,預設的是 key.hashcode integer max value reducetask 獲取分割槽號。如果使用者自...