RDD每使用一次高阶函数,都会被发送到下一个节点处理吗

RDD每使用一次高阶函数,都会被发送到下一个节点处理吗

RDD每使用一次高阶函数,都会被发送到下一个节点处理吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
徐老师 2020-08-30 11:56:29

是的,可以这样理解。

不过还有一种特殊情况

如果给spark任务分配的executor都在一台机器上的话,那这个时候我们所说的"下一个节点",其实就还是这同一个节点了。

  • 提问者 孤独观测者 #1
    这样会不会有很大的网络开销,数据在a节点处理完了,发往b节点,好处是啥?感觉都在a节点处理,效率是一样的
    2020-08-30 12:03:38
  • 徐老师 回复 提问者 孤独观测者 #2
    因为RDD是有多个分区的,它们会并行计算,不同分区的数据可能会分到不同节点上面去执行,可以提高执行效率,这个时候在执行一些shuffle算子的时候,需要聚合,这样其它节点上的数据就会跨节点传输汇聚过来 如果我们只给这个任务分配一个executor,那么所有任务执行都在这一个executor里面,就不会涉及节点之间数据传输了,但是这个时候一个executor的处理能力又是有限的 所以是需要进行取舍平衡的,如果都在一个节点上,这一个节点的处理能力是有限的,如果分到多个节点上,数据就势必需要通过节点传输 我们需要在CPU的性能消耗上和数据传输的时间消耗上进行平衡,所以在给spark分配资源的时候,不能盲目的分配多大资源,这个时候会性能提升也没多大好处,本来可以进行节点内数据传输的,结果却变成了节点间数据传输
    2020-08-30 12:24:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师