所有 Spark 文件路径基本上都是驱动程序节点中的路径吗?

问题描述 投票:0回答:1

在运行 Ubuntu 22.04 的笔记本电脑上使用 Scala 2.12.17 版学习 Spark 3.4.0 版。

从一些在线文档和教程中,我了解到这就是一般的 spark 架构的样子。

虽然现在一切都在我的本地主机上,但一般来说,上面的每个盒子都可以在不同的 EC2 实例上运行,我说得对吗?

但是,在那种情况下,我的

.scala
代码中的所有文件路径都代表驱动程序中的路径吗?例如,如果我在 spark RDD 框架上运行它(当集群在不同节点上有许多执行程序时),

df.write.parquet("/root/della/Downloads/output/tensorflow_clusters.parquet")

那么整个框架是否会转到驱动程序本地的上述目录,这样即使工人和经理最终死亡,驱动程序也可以完全访问本地数据?这是我在教程中没有明确阐明的概念。

此外,假设我想将镶木地板放在一些可安装的云存储中,例如 AWS S3 存储桶。在这种情况下,我可以将存储桶挂载到驱动程序中方便的目录only(例如使用s3fs),然后无缝写入存储桶(通过驱动程序中的本地目录)吗?还是我需要在每个执行器上安装桶?

我之前在 python pandas(当然是在单机上运行)中使用过 bucket mount 技术来进行云 I/O,想知道它是否以同样的方式发生在 spark 中。

amazon-web-services scala apache-spark amazon-s3
1个回答
0
投票

有一个“默认文件系统”,用于解析非完全限定 URL 的路径。这是在 hadoop 选项中设置的

fs.defaultFS
,本地文件系统的默认值,因此有效

spark.hadoop.fs.defaultFS file:///

除非你改变这个,像

"/root/della/Downloads/output/tensorflow_clusters.parquet"

这样的路径

将在每个主机上以不同方式解决。除非您挂载共享文件系统,否则他们不会看到彼此工作,例如nfs.

spark 使用的 hadoop 文件系统 API 是为与分布式文件系统一起工作而编写的,您无需在本地安装它们。你需要

  1. 分布式文件系统。
  2. 您的员工有访问权限
  3. 引用它的 URL,或者默认的 fs 选项设置为“这是默认值”

注意,s3 几乎但不完全是一个分布式文件系统,原因在其他地方有详细记录。可以将它用作 spark 的集群 FS,但你需要一个特殊的“提交者”来安全地正确工作:S3A 提交者、EMR Spark 提交者,*或使用 S3-first 表格式,如 Iceberg、Delta 或 Hudi”

© www.soinside.com 2019 - 2024. All rights reserved.