SparkContext.addFile 将文件上传到驱动程序节点,但不上传到工作节点

sta*_*wed 5 filenotfoundexception apache-spark

sc.texfile("file:///.../myLocalFile.txt")我尝试在集群上运行 a并java.io.FileNotFoundException在工作人员上运行。

所以我用谷歌搜索,找到sc.addFile/SparkFiles.get将文件上传给每个工人。

所以这是我的代码:

sc.addFile("file:///.../myLocalFile.txt")
val input = sc.textFile(SparkFiles.get("myLocalFile.txt"))
Run Code Online (Sandbox Code Playgroud)

我看到驱动程序节点将文件上传到目录中/tmp,然后我的工作人员得到了,FileNotFoundException因为:

  1. 我没有看到任何打印输出表明工作人员已经下载了他们应该下载的文件
  2. 他们尝试使用驱动程序的路径访问该文件。所以我假设SparkFiles.get()是在驱动程序节点上运行,而不是在工作节点上运行(我通过添加 来确认println)。

我尝试使用spark-submit --files选项,发现了完全相同的问题。

那么我做错了什么?我想要的只是sc.textFile()在一个集群上。

小智 0

您需要将工作人员上的文件复制到与驱动程序相同的路径,或者使用 hdfs,因为它将在工作人员上可用。工人没有这些文件,您可以转到文件夹并查看自己,我会 scp 它们

  • 是的,但正是为了避免使用 scp,我想使用 addFile。“在每个节点上添加要与此 Spark 作业一起下载的文件。” (来自https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html) (2认同)