【问题标题】:SparkContext.addFile upload the file to driver node but not workersSparkContext.addFile 将文件上传到驱动节点而不是工作节点
【发布时间】:2018-05-24 10:43:35
【问题描述】:

我尝试在集群上运行sc.texfile("file:///.../myLocalFile.txt"),并在worker上运行java.io.FileNotFoundException

所以我搜索了一下,发现sc.addFile / SparkFiles.get 将文件上传给每个工人。

这是我的代码:

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

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

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

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

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

【问题讨论】:

  • 传递文件的完整路径会有所帮助并查看此链接community.hortonworks.com/questions/38482/…
  • 提供完整路径无济于事,我已经浏览了您提供的链接,但没有任何帮助,因为 --filesaddFiles 都不适合我(因此我的问题)。跨度>
  • 我也有同样的问题。你找到答案了吗?

标签: apache-spark filenotfoundexception


【解决方案1】:

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

【讨论】:

【解决方案2】:

sc.addFile 不是为了这个目的。如果你想通过 sc 读取文件,你需要将文件放在 hdfs 上,而不是使用 sc.addFile

【讨论】:

  • 好的,那么 addFile 的目的是什么?我删除了对sc.textFile 的调用(这显然删除了FileNotFoundException),但我仍然没有看到上传给工作人员的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2017-01-04
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多