1)Lineage 说明
Lineage 保存了RDD的依赖关系
如:有这样的依赖关系:A =map=> B =filter=>C
假设B的RDD某个分区挂了,就可以通过血缘关系重新计算map的函数获取回来
即:一个RDD是如何从父RDD计算过来的
2)假如某RDD的分区是通过几个分区reducebykey算出来的,这时候得几个一起计算,如图:
3)Denpendence 两种介绍
Narrow 窄依赖 : 一个父RDD的partition至多被子RDD的某个partition使用一次 ,没有shuffle,容错和速度都很理想
Wide 宽依赖:一个父RDD的partition会被子RDD的某个partition使用多次,有shuffle,挂掉要重算,性能差很多
4)窄依赖
Q:Spark的join是窄依赖还是宽依赖?
A:join with inputs co-partitioned是窄依赖,其余都是宽依赖
5)宽依赖
Wide 会产生Shuffle , 只要n个有shuffle,都会被拆成n+1个stage
以下例子属于宽依赖:join / xxbykey(通过key分发都会产生shuffle)
6)stage图解,以下为通过两个shuffle最终有3个stage的案例
7)wordcount stage变化图解