天天看點

Spark 算子操作剖析2

開發者學堂課程【大資料實時計算架構 Spark 快速入門:Spark 算子操作剖析2】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/100/detail/1688

Spark 算子操作剖析 2

mapToPair (窄依賴)不會影響并行度,隻有 Shuffle 算子(包括 repartition )傳指定參數,才會改變并行度,預設情況下,如果沒有設定 spark.default.parallelism 參數,找上一個副ID,如果設有 spark.default.parallelism 參數,則按照規定。

Shuffle 端分為 map 端和 reduce 端,有 map 階段就有 maptasks,有 reduce 階段就有 reducetasks。groupByKey 一個算子有兩個階段,需要分開來看。

由兩個 Shuffle 的算子切割了三個 Stage:

第一階段 repartition 前(map   Shuffle map),

第二階段 repartition 到 groupByKey(Shuffle reduce   map   Shuffle map),

第三階段 groupByKey 之後 (Shuffle reduce)

partition 的個數:

第一階段 RDD 如果沒有設定預設并行度,就看資源有多少個,經過一個 map 的窄依賴,并行度不變,再經過 repaitition Shuffle 的 map 階段,并行度不變,每個 partition 内部分為多個 partition,分組數量取決于下遊 reduce task 的數量,等于 repartition 算子中的數量;

第二階段經過 Shuffle 的 reduce 階段取決于 repartition 括号裡的數量,每一個partition 來自上遊RDD第一個為零的取過來的,Shuffle 的 reduce 端會主動 fetch,再經過對并行度不産生影響的 map 階段,Shuffle 的 map 階段為後續準備好資料,取決于groupByKey 有無參數1無參無default,同上,2無參有 default 安照設定準備好資料3有參 按照參數.

return new Tuple2(tuple._1, tuple._2+2);

D3

javapairRDD results = mapped.repartition(10);

JavaPairRDD temp = results.mapToPair(new PairFunction

private static final long serialVersionUID = 1L;

@Override

public Tuple2 call(Tuple2 tuple)

throws Exception {

javapairRDD> finalResults = temp.groupByKey();

finalResults.collect();

繼續閱讀