Spark與Hadoop Shuffle對比


1)

  • spark中只有特定的算子會觸發shuffle,shuffle會在不同的分區間重新分配數據!

  • 如果出現了shuffle,會造成需要跨機器和executor傳輸數據,這樣會導致 低效和額外的資源消耗!

2)
和Hadoop的shuffle不同的時,數據分到哪些區是確定的,但是在區內的順序不一定有序!

Hadoop 的shuffle :
MapTask : map------- sort -------- merge
ReduceTask: copy ---- sort ----- reduce

shuffle階段 : sort -------- merge ----- copy ---- sort

Spark的shuffle:
第一種表現: MapTask端也不排序,ReduceTask一定不排序!
第二種表現: MapTask端可以排序,ReduceTask一定不排序!

如果希望shuffle后的數據有序,可以以下操作:
a) 調用mapPartitions,對每個分區的數據,進行手動排序!
b)repartitionAndSortWithinPartitions
c)sortBy

3)
什么操作會導致shuffle
a)重新分區的算子 : reparition, collase
b) xxxBykey類型的算子,除了 count(統計)ByKey
c)join類型的算子,例如cogroup and join.

4)
在Spark中,shuffle會帶來性能消耗,主要涉及 磁盤IO,網絡IO,對象的序列化和反序列化!

總結:
①Spark的shuffle和Hadoop的shuffle目的都是為了 在不同的task交換數據!
② Spark的shuffle借鑒了hadoop的shuffle,但是在細節上略有不同
hadoop的shuffle: 在到達ReduceTask端時,會進行排序!
在Spark中,數據在ReduceTask端一定不排序,在MapTask端,可以根據設置進行排序或不排!
③shuffle會消耗性能,因此能避免就避免,避免不了,采取一些優化的策略!

 


免責聲明!

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



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