大数据面试与架构调优 RDD On Spark篇
(map 、 mappartition)(transformation) 、(foreach、foreachprtition )(action类型算子)
1: map 是作用到RDD每个元素都遍历下,如果是持久化数据需要创建连接,就会创建很多连接。
2:mappartition 是作用到每个分区遍历一次,相对map更加合理,但是有可能单个partition过大
会导致资源不被释放,这个时候莫慌指定partition数量即可。
3: foreach 同上就是算子类型不一样
4: foreachpartition 同上就是算子类型不一样
groupByKey 与 reduceByKey
1:算子都适用于Transformation类型算子,都会产生Shuffle (调优可以缓存产生Shuffle的数据),groupByKey不会在RDD局部聚合产生的数据也是CompactBuffer,reduceByKey在RDD先局部聚合在全局聚合。
2:groupByKey 比 reduceByKey shuffer数据大小要大,所以进来选择reduceByKey。
colleat(action算子)
1: 会把结果加载到内存里 慎用,产生OOM
2:如果一定想看看colleat().take(100) 来看看得了,或者直接用saveAsTextFile("hdfs://......")再看。
coalesce 与 repartition的有区别
1:coalesce 可以根据传入的分区数 把已有的分区数压缩并且不产生shuffer,如果增加分区数参数二传递true就会产生shuffer。
2: repartition 底层默认调用coalesce 默认传递true,所以会传输shuffer
cache 与 persist的区别
1:cache 默认调用了 persist,persist默认调用了persist(MEMORY_ONLY)
spark 执行流程
https://blog.****.net/lucklilili/article/details/99460391
Spark 划分stage原理
Spark RDD生成到task提交的四个阶段