我是 storm 转来 spark 的,storm 可以让我们自己控制数据放在那台机上跑,而我看 spark 好像都是 drive 端定义好然后提交执行,rdd 分布在哪台机对于我们来说似乎是个黑盒?听说对于 hdfs 来说,rdd 会尽可能地放到数据存放的那台机执行?
另外就是假如我有个场景,做流处理,有一块数据需要常驻内存用于跟流匹配,storm 就可以直接初始化在每台机上( hash 分区),spark 的话怎么处理?好像只能用广播传递到每个 rdd,那这样每次都传不会很耗费网络 io ?
附上我之前的一点发现= =: https://www.v2ex.com/t/508511#reply5
1
cyspy 2018-11-19 10:37:57 +08:00 1
后一个问题是 Spark 的广播变量解决的吧,不适用广播变量的话就是数据跟随 lambda 闭包发送到所有 Executor,每个 RDD Partition 一次,如果用广播变量的话是一次发送到所有 Executor,之后就不再需要重复发送了。至于分配,我理解上 Storm 这类流式处理更多的是搭建一个长期运行的集群系统,而 Spark 是一个批处理系统,以任务为单位的,一个 Executor 挂了会把任务在其他 Executor 上重跑,所以不指定机器。
|