spark 集群对于 rdd 的分配是怎样的?

2018-11-19 10:26:37 +08:00
 VoidChen

    我是 storm 转来 spark 的,storm 可以让我们自己控制数据放在那台机上跑,而我看 spark 好像都是 drive 端定义好然后提交执行,rdd 分布在哪台机对于我们来说似乎是个黑盒?听说对于 hdfs 来说,rdd 会尽可能地放到数据存放的那台机执行?
    另外就是假如我有个场景,做流处理,有一块数据需要常驻内存用于跟流匹配,storm 就可以直接初始化在每台机上( hash 分区),spark 的话怎么处理?好像只能用广播传递到每个 rdd,那这样每次都传不会很耗费网络 io ?

    附上我之前的一点发现= =: https://www.v2ex.com/t/508511#reply5

1529 次点击
所在节点    程序员
2 条回复
cyspy
2018-11-19 10:37:57 +08:00
后一个问题是 Spark 的广播变量解决的吧,不适用广播变量的话就是数据跟随 lambda 闭包发送到所有 Executor,每个 RDD Partition 一次,如果用广播变量的话是一次发送到所有 Executor,之后就不再需要重复发送了。至于分配,我理解上 Storm 这类流式处理更多的是搭建一个长期运行的集群系统,而 Spark 是一个批处理系统,以任务为单位的,一个 Executor 挂了会把任务在其他 Executor 上重跑,所以不指定机器。
VoidChen
2018-11-19 10:46:10 +08:00
@cyspy 感觉理解很到位,就是这个广播变量,每次任务都要发送一次有点难受。。。如果这个 rdd 转换过那广播变量还能跟过去吗?

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

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

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

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

© 2021 V2EX