hadoop執行原理之shuffle

2021-08-14 20:44:29 字數 1411 閱讀 7225

hadoop的核心思想是mapreduce,但shuffle又是mapreduce的核心。shuffle的主要工作是從map結束到reduce開始之間的過程。首先看下這張圖,就能了解shuffle所處的位置。圖中的partitions、copy phase、sort phase所代表的就是shuffle的不同階段。

shuffle階段又可以分為map端的shuffle和reduce端的shuffle。

一、map端的shuffle

map端會處理輸入資料並產生中間結果,這個中間結果會寫到本地磁碟,而不是hdfs。每個map的輸出會先寫到記憶體緩衝區中,當寫入的資料達到設定的閾值時,系統將會啟動乙個執行緒將緩衝區的資料寫到磁碟,這個過程叫做spill。

在spill寫入之前,會先進行二次排序,首先根據資料所屬的partition進行排序,然後每個partition中的資料再按key來排序。partition的目是將記錄劃分到不同的reducer上去,以期望能夠達到負載均衡,以後的reducer就會根據partition來讀取自己對應的資料。接著執行combiner(如果設定了的話),combiner的本質也是乙個reducer,其目的是對將要寫入到磁碟上的檔案先進行一次處理,這樣,寫入到磁碟的資料量就會減少。最後將資料寫到本地磁碟產生spill檔案(spill檔案儲存在指定的目錄中,map任務結束後就會被刪除)。

最後,每個map任務可能產生多個spill檔案,在每個map任務完成前,會通過多路歸併演算法將這些spill檔案歸併成乙個檔案。至此,map的shuffle過程就結束了。

二、reduce端的shuffle

reduce端的shuffle主要包括三個階段,copy、sort(merge)和reduce。

首先要將map端產生的輸出檔案拷貝到reduce端,但每個reducer如何知道自己應該處理哪些資料呢?因為map端進行partition的時候,實際上就相當於指定了每個reducer要處理的資料(partition就對應了reducer),所以reducer在拷貝資料的時候只需拷貝與自己對應的partition中的資料即可。每個reducer會處理乙個或者多個partition,但需要先將自己對應的partition中的資料從每個map的輸出結果中拷貝過來。

接下來就是sort階段,也成為merge階段,因為這個階段的主要工作是執行了歸併排序。從map端拷貝到reduce端的資料都是有序的,所以很適合歸併排序。最終在reduce端生成乙個較大的檔案作為reduce的輸入。

最後就是reduce過程了,在這個過程中產生了最終的輸出結果,並將其寫到hdfs上。

現在來總結一下shuffle過程,我畫了張圖,希望能夠幫助理解。

hadoop之MapReduce執行流程

mapreduce執行流程 1 執行mapred程式 不是hadoop節點也可以提交程式 2 本次執行將生成乙個job,於是jobclient向jobtracker 協調作業執行 申請乙個jobid以標識這個job 3 jobclient將job所需要的資源提交到hdfs中乙個以jobid命名的目錄...

Hadoop之MapReduce框架原理

mapreduce的資料流 1 問題引入 maptask的並行度決定map階段的任務處理併發度,進而影響到整個job的處理速度。思考 1g的資料,啟動8個maptask,可以提高集群的併發處理能力。那麼1k的資料,也啟動8個maptask,會提高集群效能嗎?maptask並行任務是否越多越好呢?哪些...

hadoop中yarn的原理及執行

一 對yarn的理解 1.關於yarn的組成 大約分成主要的四個。2.resourcemanager rm 的理解 rm是全域性資源管理器,負責整個系統的資源管理和分配。主要由兩個元件組成 排程器和應用程式管理器 asm 應用程式管理器 負責管理整個系統中所有應用程式 使用者提交的每個應用程式均包含...