ApacheSparkBook icon indicating copy to clipboard operation
ApacheSparkBook copied to clipboard

NarrowDependency中的ManyToManyDependency不会造成重复计算吗?

Open ycli12 opened this issue 2 years ago • 4 comments

我在看书籍图3.2的时候发现ManyToManyDependency和ShuffleDependency很像,但ManyToManyDependency属于NarrowDependency,那么Stage划分的时候不会分成两个分区,这样按照P103的想法2,每次计算child RDD的每个分区的时候都需要重复计算全部的父RDD,因此将ManyToManyDependency划分为ShuffleDependency会不会更好一点呢?ManyToManyDependency可以看作在shuffle write的时候写入整个分区到各个子RDD的ShuffleDependency。

ycli12 avatar Apr 10 '22 13:04 ycli12

@ycli12 谢谢提出的问题,ManyToManyDependency确实和ShuffleDependency很像,但ManyToManyDependency属于NarrowDependency,因为ManyToManyDependency不涉及分区,也不需要运行Shuffle write/read流程,具体例子见cartesian()。当然如果强行套用Shuffle框架,将RDD中所有数据都放到一个分区,然后执行Shuffle过程,那么child RDD可能不能收到想要的数据,比如如果将图3.2中的第二图中的分区1和2都改为分区1,那么RDD2中第二个p得不到任何数据。所以虽然ManyToManyDependency和ShuffleDependency样子相似,但两者是不同的计算逻辑。

JerryLead avatar Apr 12 '22 10:04 JerryLead

@JerryLead 谢谢徐老师的回复,我还有一点疑问,根据P103的想法2,ManyToManyDependency在这里会不会存在重复计算的问题呢?每次计算child RDD的每个分区的时候都需要重复计算全部的父RDD。

ycli12 avatar Apr 13 '22 14:04 ycli12

@ycli12 理论上会出现重复计算,如果父RDD已经被cache就不用重复计算。

JerryLead avatar Apr 13 '22 15:04 JerryLead

做一下总结,ManyToManyDependency跟ShuffleDependency不一样的地方: 1、ShuffleDependency在分区时候需要对partitionId进行排序或者Hash,而ManyToManyDependency不需要 2、ShuffleDependency是分发,只有一份,而ManyToManyDependency是复制多份

ycli12 avatar Jun 10 '22 14:06 ycli12