一、MapReduce的Shuffle機制:算法
在MapReduce框架中,shuffle是鏈接Map和Reduce之間的橋樑,Map大的輸出要用到Reduce中必須通過shuffle這個環節,網絡
shuffle的性能高低直接影響了整個程序的性能和吞吐量。
Shuffle是MapReduce框架中的一個特定的phase,介於Map phase和Reduce phase之間,當Map的輸出結果要被Reduce使用時,輸出結果須要按key哈希,而且分發到每個Reducer上去,這個過程就是shuffle。
因爲shuffle涉及到了磁盤的讀寫和網絡的傳輸,所以shuffle性能的高低直接影響到了整個程序的運行效率。
2:Spark的Shuffle機制:
Spark中的Shuffle是
把一組無規則的數據儘可能轉換成一組具備必定規則的數據。
Spark計算模型是
在分佈式的環境下計算的,這就不可能在單進程空間中容納全部的計算數據來進行計算
,這樣數據就按照Key進行分區,分配成一塊一塊的小分區,打散分佈在集羣的各個進程的內存空間中,並非全部計算算子都知足於按照一種方式分區進行計算。
當須要對數據進行排序存儲時,就有了從新按照必定的規則對數據從新分區的必要,
Shuffle就是包裹在各類須要重分區的算子之下的一個對數據進行從新組合的過程。在邏輯上還能夠這樣理解:因爲從新分區須要知道分區規則,而分區規則按照數據的Key經過映射函數(Hash或者Range等)進行劃分,由數據肯定出Key的過程就是Map過程,同時Map過程也能夠作數據處理,例如,在Join算法中有一個很經典的算法叫Map Side Join,就是肯定數據該放到哪一個分區的邏輯定義階段。
Shuffle將數據進行收集分配到指定Reduce分區,Reduce階段根據函數對相應的分區作Reduce所需的函數處理。