shuffle


shuffle是spark中一個很重要的概念,它表示的是上游分區的數據打散到下游分區中。一般來說,shuffle類的算子比如reducebykey會發生shuffle,但是並不是一定會產生。

比如,前面已經經過groupbykey進行分組了,現在再次調用shuffle類算子比如groupbykey,而這時候用的分區器和上游使用的一樣,並且下游分區的數量沒有改變,那么就不會產生shuffle。

原因就是分區器沒改變,分區數也沒有改變。那么相同key的hashcode值也沒有改變,0號分區的數據還是進到下游0號分區,這里就不會產生打散數據這種操作

shuffle的過程分為shuffle write和shuffle read,shuffle是划分stage的標志,shuffle write將計算的中間結果存到當前節點的buffer中,當緩沖區滿或者當前計算任務數據處理完成就把數據溢寫到本地磁盤。降低內存壓力和減低容錯恢復數據的壓力,這樣是為了給下游RDD來拉取數據,以及防止任務失敗,可以從這個保存好的中間結果處繼續計算,而不必重新重頭計算。而且並不是溢寫到磁盤就產生一個新文件,這樣會導致產生很多小文件,在同一個core中執行的shuffleMap task會溢寫到同一個文件中,按index索引號進行區分,data文件另外存放。(類似於 kafka中的Index和data形式),下圖可以很清楚的看到。

sortshuffleManager

詳細看這個鏈接

https://www.cnblogs.com/qingyunzong/p/8954552.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM