Spark-Shuffle過程概要參考
在MapReduce框架中,shuffle是連線Map和Reduce之間的橋樑,Map的輸出要用到Reduce中必須經過shuffle這個環節,shuffle的效能高低直接影響了整個程式的效能和吞吐量。Spark作為MapReduce框架的一種實現,自然也實現了shuffle的邏輯。
Spark-Shuflle發展階段
Spark-Shuflle1: HashShuflle階段,生成MM*RR箇中間小檔案,MM為Map數量,RR為Reduce數量;
Spark-Shuffle2: 優化的HashShuflle,cosolidate機制,生成CC * RR箇中間小檔案,CC為core數量;
Spark-Shuffle3: SortShuffle階段,生成MM*2箇中間小檔案#(資料檔案 + 索引檔案)。
什麼是Shuffle?
Shuffle是MapReduce框架中的一個特定的phase,介於Map phase和Reduce phase之間,當Map的輸出結果要被Reduce使用時,輸出結果需要按key雜湊,並且分發到每一個Reducer上去,這個過程就是shuffle。由於shuffle涉及到了磁碟的讀寫和網路的傳輸,因此shuffle效能的高低直接影響到了整個程式的執行效率。
下面這幅圖清晰地描述了MapReduce演算法的整個流程,其中shuffle phase是介於Map phase和Reduce phase之間。
概念上shuffle就是一個溝通資料連線的橋樑,那麼實際上shuffle(partition)這一部分是如何實現的的呢,下面我們就以Spark為例講一下shuffle在Spark中的實現。
Spark Shuffle進化史
先以圖為例簡單描述一下Spark中shuffle的整一個流程:
首先每一個Mapper會根據Reducer的數量建立出相應的bucket,bucket的數量是MM×RR,其中MM是Map的個數,RR是Reduce的個數。
其次Mapper產生的結果會根據設定的partition演算法填充到每個bucket中去。這裡的partition演算法是可以自定義的,當然預設的演算法是根據key雜湊到不同的bucket中去。
當Reducer啟動時,它會根據自己task的id和所依賴的Mapper的id從遠端或是本地的block manager中取得相應的bucket作為Reducer的輸入進行處理。
#補充說明:這裡的bucket是一個抽象概念,在實現中每個bucket可以對應一個檔案,可以對應檔案的一部分或是其他等。
Apache Spark 的 Shuffle 過程與 Apache Hadoop中MR 的 Shuffle 過程有著諸多類似,一些概念可直接套用,例如,Shuffle 過程中,提供資料的一端,被稱作 Map 端,Map 端每個生成資料的任務稱為 Mapper,對應的接收資料的一端,被稱作 Reduce 端,Reduce 端每個拉取資料的任務稱為 Reducer,Shuffle 過程本質上都是將 Map 端獲得的資料使用分割槽器進行劃分,並將資料傳送給對應的 Reducer 的過程。
#
相關文章
- 無參過程與無參函式函式
- 一個考過CCNA的朋友經驗參考(轉)
- 科目三考試過程
- OSI參考模型和TCP/IP參考模型模型TCP
- javamail參考JavaAI
- SQLAlchemy參考SQL
- 參考地址
- DOM參考手冊及事件參考手冊事件
- 2019軟考備戰:軟考中級課程+參考資料
- WebApiClient效能參考WebAPIclient
- OSI參考模型模型
- Git教程參考Git
- 參考資料
- 前端參考指南前端
- SRVCTL 命令參考
- XMLHTTP物件參考XMLHTTP物件
- MySql儲存過程中limit傳參MySql儲存過程MIT
- 模擬考試參考程式碼
- 【軟考之軟體過程模型總結】模型
- CloudBeaver 參考架構Cloud架構
- Blender參考API用法API
- SQL優化參考SQL優化
- Oracle ASMCMD命令參考OracleASM
- MarkDown語法參考
- mybatis學習參考MyBatis
- [ CSS ] animation 快速參考CSS
- #region(C# 參考)C#
- RAC安裝 參考
- QThread類參考QTthread
- aix 參考資料AI
- Oracle常用Event參考Oracle
- sql 優化參考SQL優化
- oracle 參考資料Oracle
- PyQtGraph繪圖參考QT繪圖
- C語言考試大綱(參考)C語言
- vue2.x原始碼解析系列二: Vue元件初始化過程概要Vue原始碼元件
- 04.Eclipse下Ndk開發(以檔案拆分合併為例模擬一下開發過程,參考檔案加密的過程)Eclipse加密
- 【TUNE_ORACLE】檢查統計資訊是否過期SQL參考OracleSQL