stage是如何划分的,为什么要划分stage
根据RDD之间的依赖关系,将Job划分为不同的stage,一个宽依赖就是一个stage。一个stage就是一个TaskSet,将stage根据不同分区划分为一个个task任务。
移动计算而不是移动数据。保证一个stage内不会发生数据的移动。
行动算子和转换算子
行动算子,触发任务的调和任务的执行。collect,reduce,take,count
转换算子,将旧RDD封装成新RDD。 map,filter,flatMap,groupBy
reduceByKey和groupByKey的区别
reduceBykey根据key,对value数据进行轻聚合,在shuffle之前,进行了combinner的操作,这样减少到了数据的迁移量。
groupByKey是根据key对数据进行分组,直接进行shuffle。
在不影响业务逻辑的前提下,优先使用reduceByKey.
repartition和coalsece的区别
两个RDD都涉及到分区的变化,repartition是coalesce的特例,底层调用的就是coalsece,repartition涉及到分区的变化必定会产生shuffle。而coalsece默认情况下是不会产生shuffle的,只有更改第二个参数为true,分区才会有shuffle。正常情况下增加分区用repartition,减少分区用coalesce。
cache或者persist缓存跟checkPoint检查点的区别
共同点:三者都是必须执行到行动算子才会触发
不同点:存储位置的差异
cache或者persist缓存是将数据存储在内存或者本地磁盘上的,可靠性相对比较低。而checkPoint是将数据存储在hdfs高容错高可用的分布式文件系统上面,安全性高。
不同点:依赖关系
cache或者persist只是保存数据在内存中,并不会切断RDD之间的血缘关系,而checkPoint是会切断血缘关系的。
不同点:生命周期
cache或者persist在程序结束后,就会自动删除,而checkPonit是永久保存的不会删除。