當前位置:編程學習大全網 - 源碼下載 - Spark的shuffle和MapReduce的shuffle對比

Spark的shuffle和MapReduce的shuffle對比

shuffle階段劃分

Map階段和Reduce階段

任務

MapTask和ReduceTask

shuffle過程

Map階段shuffle:分區->排序->合並

①數據從環形緩沖區溢寫到磁盤前,需要先進行分區,然後區內排序

②環形緩存區數據到達閾值(80%),會以小文件的形式溢寫到磁盤,此過程可以開啟combiner

③將溢寫的小文件按照相同分區進行merge

Reduce階段shuffle:拷貝數據->排序->合並

①壹個ReduceTask負責壹個分區數據,需從多個MapTask的同壹個分區拷貝數據到機器。

②將拷貝過來的數據優先存儲在內存,次之磁盤,然後排序,合並做到數據分區內有序

shffle的意義 :只有存在reduce才有shuffle,shuffle的意義就是給reduce提供服務。

介紹

①spark的某些算子會觸發shuffle,出現shuffle的目的是在不同分區間重新分配數據。

②shuffle過程數據是跨機器傳輸的,消耗大量的網絡io和序列化,消耗性能。

③shuffle後不能保證新的分區的數據是有序的。區別於MR ( MR的shuffle後區內的數據是有序的 )

但是可以調用排序的算子,使得數據區內有序。

④產生shuffle的算子都是分兩步執行,mapTask組織數據(shuffle write), reduceTask(shuffle read)

⑤spark的mapTask優先將數據寫入內存,內存不足,將數據區內有序,溢寫到磁盤

會產生shuffle的算子

①repartition 和 coalesce 重新計算分區的算子。

②?ByKey:除了countByKey,都會產線shuffle

③cogroup 和 join

性能的影響

shuffle就是將數據在不同分區間進行聚合分配,集群的多節點的數據交換,會涉及到磁盤I/O,序列化,網絡I/O,很消耗性能。

spark中的shuffle耗時,消耗性能,應該盡量避免!

spark中的shuffle和MapReduce的shuffle的功能壹致,跨機器傳輸數據,細節略有不同。

  • 上一篇:Activity的啟動流程
  • 下一篇:以前幾毛錢壹個的比特幣漲了很多,那麽當初擁有大量比特幣的人現在過得怎樣?
  • copyright 2024編程學習大全網