在mapreduce框架中,shuffle是連線map和reduce之間的橋梁,map的輸出要用到reduce中必須經過shuffle這個環節,shuffle的效能高低直接影響了整個程式的效能和吞吐量。spark作為mapreduce框架的一種實現,自然也實現了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的整乙個流程:
m×rm×r,其中
mm是map的個數,
rr是reduce的個數。
這裡的bucket是乙個抽象概念,在實現中每個bucket可以對應乙個檔案,可以對應檔案的一部分或是其他等。
參考:
spark textFile讀取多個檔案
1.1 簡單讀取檔案 val spark sparksession.builder demo master local 3 getorcreate 讀取hdfs檔案目錄 spark.sparkcontext.textfile user data spark.sparkcontext.textfile...
矩陣的困惑
include stdafx.h include include include include pragma comment lib,cv.lib pragma comment lib,cvcam.lib pragma comment lib,cxcore.lib pragma comment l...
新手的困惑
作為一名學習c 的新手,在學習的過程中遇到了很多的困惑。第一是沒有合適的教材,買了一堆的教材,最後發現很多都沒用,都是些標題黨寫的,看著挺吸引人的,實際上不一定適合你 第二是有問題的時候不知道需要能問誰,描述問題不準確網上找答案也不一定有結果,這樣就需要學習者平時多總結。第三是沒有實踐的機會,只是看...