SparkContext.addFile将文件上传到驱动程序节点而不是工作者

时间:2018-05-24 10:43:36

标签: apache-spark filenotfoundexception

我尝试在群集上运行sc.texfile("file:///.../myLocalFile.txt"),然后我对工作人员java.io.FileNotFoundException

所以我用Google搜索,我发现sc.addFile / SparkFiles.get将文件上传到每个工作人员。

所以这是我的代码:

sc.addFile("file:///.../myLocalFile.txt")
val input = sc.textFile(SparkFiles.get("myLocalFile.txt"))

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

  1. 我没有看到任何打印输出说工人已经下载了文件
  2. 他们尝试使用驱动程序的路径访问该文件。所以我假设SparkFiles.get()在驱动程序节点上运行,而不是工作者(我通过添加println确认)。
  3. 我尝试使用spark-submit --files选项,我看到完全相同的问题。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

sc.addFile不是为此目的。如果要通过sc读取文件,则需要将文件放在hdfs而不是使用sc.addFile