加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Spark RDD – 他们如何工作

发布时间:2020-12-16 09:35:08 所属栏目:安全 来源:网络整理
导读:我有一个小型Scala程序,在单节点上运行良好。但是,我正在缩放它,所以它运行在多个节点上。这是我第一次这样的尝试。我只是想了解RDD如何在Spark中工作,所以这个问题是基于理论的,可能不是100%正确的。 假设我创建一个RDD: val rdd = sc.textFile(file
我有一个小型Scala程序,在单节点上运行良好。但是,我正在缩放它,所以它运行在多个节点上。这是我第一次这样的尝试。我只是想了解RDD如何在Spark中工作,所以这个问题是基于理论的,可能不是100%正确的。

假设我创建一个RDD:
val rdd = sc.textFile(file)

现在一旦这样做了,这是否意味着文件中的文件现在在节点之间进行分区(假设所有节点都可以访问文件路径)?

其次,我想计算RDD中的对象数(足够简单),但是我需要在需要应用于RDD中的对象的计算中使用该数字 – 一个伪代码示例:

rdd.map(x => x / rdd.size)

假设在rdd中有100个对象,并且说有10个节点,因此每个节点计数10个对象(假设这是RDD概念如何工作),现在当我调用该方法时,每个节点将执行计算rdd.size为10或100?因为总体而言,RDD的大小为100,而是在每个节点上本地只有10个。我需要在进行计算之前制作一个广播变量?这个问题与下面的问题有关。

最后,如果我转换到RDD,例如rdd.map(_。split(“ – ”)),然后我想要RDD的新大小,我需要对RDD执行一个动作,比如count(),所以所有的信息都被发送回驱动程序节点?

解决方法

通常,文件(或文件的一部分,如果太大)被复制到集群中的N个节点(默认情况下,HDFS上为N = 3)。这并不意味着在所有可用节点之间分割每个文件。

但是,对于使用Spark的文件,您(即客户端)应该是透明的 – 不管rdd.size有什么区别,无论分割和/或复制了多少个节点。有一些方法(至少在Hadoop中)来查找当前可以在哪些节点(部分)文件中找到的方法。但是,在简单的情况下,您很可能不需要使用此功能。

更新:描述RDD内部的文章:https://cs.stanford.edu/~matei/papers/2012/nsdi_spark.pdf

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读