spark 的 shuffle 算子一定会产生宽依赖吗?

2019-01-19 20:56:29 +08:00
 belcher

今天朋友抛出一个很有意思的结论: shuffle 不一定产生宽依赖,但是宽依赖一定是由 shuffle 产生的。 我想了好久,有没有这种情况,在极端情况下,就算使用了 shuffle 算子,父子 rdd 的 partition 依然是一对一的关系,这样实际就没有形成宽依赖虽然使用了 shuffle 算子。 熟悉 spark 的大佬,谁对这一块比较熟,不吝赐教!

4863 次点击
所在节点    Hadoop
5 条回复
bsidb
2019-01-19 21:02:46 +08:00
当两个参加 join 的 RDD 的 partitioner 是同一个对象时,会产生窄依赖而不是宽依赖。在这种情况下,两个 RDD 之间只要对应的 partition 互相 join 即可,不会产生宽依赖问题。

RDD 的 partitioner 有专门的 API 设置,不设置则为 None。
belcher
2019-01-19 21:20:04 +08:00
@bsidb 我懂了,分区规则一样,join 的时候 partition 就不存在一对多的情况了,也就是 shuffle 算子不一定产生宽依赖。那么,宽依赖一定是由 shuffle 产生的,这句话是对的么,有没有特例?
cyspy
2019-01-20 00:18:35 +08:00
shuffle 是用来解决宽依赖问题的一个方法,而可能产生宽依赖的算子就可以叫做 shuffle 算子。
jakson
2019-01-20 22:23:59 +08:00
个人看法:
shuffle 一定是宽依赖,源码中对宽窄依赖,是根据算子的名称来定的(我记得源码里面是这样的,宽窄依赖也是这样定的)。
他的意思是即使是宽依赖,但不一定会有数据的网络传输吧
belcher
2019-01-20 22:36:15 +08:00
@jakson 问题就在这,概念上是你说的这样的。宽依赖本质是父 rdd 的一个 partition 被多个子 rdd 的 partition 共享,就是一对多。那么如果使用了 shuffle 算子之后,父 rdd 的一个 partition 并没有被多个子 rdd 的 partition 共享,而是只分配给了一个子 rdd 的 partition,这还算宽依赖吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/528667

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX