Apache spark 为什么Spark需要在每个节点上都存在本地文件?

Apache spark 为什么Spark需要在每个节点上都存在本地文件?,apache-spark,Apache Spark,当驱动程序执行“sc.textFile”时,为什么我们需要文件出现在每个节点上?如果我们将其复制到每个节点,那么spark如何处理重复数据的执行?使用hdfs文件系统而不是本地文件系统,可以从所有spark节点访问本地文件系统。从spark角度看,没有重复数据 在驱动程序上,它将决定需要多少分区,并相应地分割文件。在驱动程序上,您会知道有如下分区 a.file - 0 to 1000 a.file - 1001 to 2000 a.file - 2001 to 3000 稍后,每个执行器

当驱动程序执行“sc.textFile”时,为什么我们需要文件出现在每个节点上?如果我们将其复制到每个节点,那么spark如何处理重复数据的执行?

使用hdfs文件系统而不是本地文件系统,可以从所有spark节点访问本地文件系统。

从spark角度看,没有重复数据

在驱动程序上,它将决定需要多少分区,并相应地分割文件。在驱动程序上,您会知道有如下分区

a.file -    0 to 1000
a.file - 1001 to 2000
a.file - 2001 to 3000
稍后,每个执行器将有一个指向文件的路径和要读取的特定块。他们不知道你不使用共享文件系统。唯一重要的是要有一个文件的路径,并知道在哪里读取它。 也许你最终只有一个遗嘱执行人,但一切都是以同样的方式发生的。只有一个执行器将具有要读取的文件位置和块。一个接一个直到处理完整个文件


它与HDFS的工作方式完全相同(我假设复制因子为1),但对于HDFS,它实际上只是一个目录和一个文件(位于特定的机器上)。所有的执行者都去那个目录。当复制因子大于1时,从spark的角度来看,它仍然只是一个目录,但请求会到达不同的节点,即文件副本所在的节点。

我理解这一点。。但我想了解这些暗示背后的逻辑,这会有帮助。。谢谢。:)@Puneethingh,谢谢=)这解决了所有问题吗?还有吗?我的意思是可能有一些我可以补充的答案。Spark Master是如何了解HDFS上的输入拆分的?是否为此联系NameNode?如果是这样的话,我们在哪里配置指向NameNode的路径URI?嗯,是的,至少是间接地。所以,当您指定要从hdfs读取的路径时,您最终还是会读取名称节点。通过这样做,spark知道FileStatus,它知道特定块,这就是它了解拆分的方式。要获取更多详细信息,请查看
org.apache.hadoop.mapred.FileInputFormat