开发者学堂课程【大数据实时计算框架 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 {
return new Tuple2(tuple._1, tuple._2+2);
D3
javapairRDD> finalResults = temp.groupByKey();
finalResults.collect();