Spark筆記整理(十七):Spark Shuffle過程

轉載自:http://www.javashuo.com/article/p-mxuuborw-es.htmlhtml

這裏只取其前面的部分,跟以前看的同樣,不過本身就懶得去畫圖總結了。而後取前半部分是由於,目前對於Spark的學習仍是在1.6,我也但願後面有時間接觸一下2.x的,由於以前跟朋友討論過,他告訴我2.x跟1.6仍是有很多的差別的,至少在使用姿式上,然而我也是十分無奈,由於現階段確實沒有太多的機會去接觸2.x的東西,然而我相信很快就有了。編程

另外,若是有MapReduce的編程經驗,其實spark的shuffle過程也是很好理解的,以前有寫過MapReduce shuffle過程的文章,其實就是那個很經典的圖。app

最近把《Hadoop權威指南》關於Spark的部分翻出來看了下,發現真的都是精華,發現它把以前本身學習Spark的不少基礎理論知識很好的總結到了一塊,尤爲是Spark On Yarn-Client&Cluster那一小節,真的總結得太好了!ide

何時須要 shuffle writer

假如咱們有個 spark job 依賴關係以下oop

咱們抽象出來其中的rdd和依賴關係:性能


E <-------n------,                    C <--n---D---n-----F--s---,                            A <-------s------ B <--n----`-- G學習

對應的劃分後的RDD結構爲:優化

最終咱們獲得了整個執行過程:spa

 

中間就涉及到shuffle 過程,前一個stage 的 ShuffleMapTask 進行 shuffle write, 把數據存儲在 blockManager 上面, 而且把數據位置元信息上報到 driver 的 mapOutTrack 組件中, 下一個 stage 根據數據位置元信息, 進行 shuffle read, 拉取上個stage 的輸出數據。3d

這篇文章講述的就是其中的 shuffle write 過程。

spark shuffle 演進的歷史

  • Spark 0.8及之前 Hash Based Shuffle

  • Spark 0.8.1 爲Hash Based Shuffle引入File Consolidation機制

  • Spark 0.9 引入ExternalAppendOnlyMap

  • Spark 1.1 引入Sort Based Shuffle,但默認仍爲Hash Based Shuffle

  • Spark 1.2 默認的Shuffle方式改成Sort Based Shuffle

  • Spark 1.4 引入Tungsten-Sort Based Shuffle

  • Spark 1.6 Tungsten-sort併入Sort Based Shuffle

  • Spark 2.0 Hash Based Shuffle退出歷史舞臺

總結一下, 就是最開始的時候使用的是 Hash Based Shuffle, 這時候每個Mapper會根據Reducer的數量建立出相應的bucket,bucket的數量是M R ,其中M是Map的個數,R是Reduce的個數。這樣會產生大量的小文件,對文件系統壓力很大,並且也不利於IO吞吐量。後面忍不了了就作了優化,把在同一core上運行的多個Mapper 輸出的合併到同一個文件,這樣文件數目就變成了 cores R 個了,

舉個例子:

原本是這樣的,3個 map task, 3個 reducer, 會產生 9個小文件,

是否是很恐怖, 後面改造以後

4個map task, 4個reducer, 若是不使用 Consolidation機制, 會產生 16個小文件。

可是可是如今這 4個 map task 分兩批運行在 2個core上, 這樣只會產生 8個小文件

在同一個 core 上前後運行的兩個 map task的輸出, 對應同一個文件的不一樣的 segment上, 稱爲一個 FileSegment, 造成一個 ShuffleBlockFile,

後面就引入了  Sort Based Shuffle, map端的任務會按照Partition id以及key對記錄進行排序。同時將所有結果寫到一個數據文件中,同時生成一個索引文件, 再後面就就引入了 Tungsten-Sort Based Shuffle, 這個是直接使用堆外內存和新的內存管理模型,節省了內存空間和大量的gc, 是爲了提高性能。

如今2.1 分爲三種writer, 分爲 BypassMergeSortShuffleWriter, SortShuffleWriter 和 UnsafeShuffleWriter,顧名思義,你們應該能夠對應上,咱們本着過期不講的原則, 本文中只描述這三種 writer 的實現細節, Hash Based Shuffle 已經退出歷史舞臺了,我就不講了。

相關文章
相關標籤/搜索