Hadoop FileUtils无法从Scala在本地(Unix)文件系统上写入文件

时间:2019-05-31 05:32:03

标签: scala apache-spark hadoop

我正在尝试使用org.apache.hadoop.fs.FileSystem的FileSystem库将文件写入本地文件系统。下面是我应该在大scala代码中执行的一个内衬代码,但实际上并非如此。

fs.copyToLocalFile(false, hdfsSourcePath, new Path(newFile.getAbsolutePath), true)

newFile的值为:

val newFile = new File(s"${localPath}/fileName.dat")

localPath只是一个变量,包含本地磁盘上的完整路径。 hdfsSourcePath是HDFS位置上的完整路径。

作业正常执行,但是我看不到在本地创建的文件。我正在Spark模式下通过cluster引擎运行它,这就是为什么我使用copyToLocalFile方法来重载useRawLocalFileSystem的第4个参数并将其设置为{{1} }。使用此方法,我们可以避免将文件写入执行者节点。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

我使用了copyToLocalFile方法,该方法使useRawLocalFileSystem的第4个参数重载并将其设置为true。使用此方法,我们可以避免将文件写入执行者节点。

我认为您认为这一点是错误的。群集模式使驱动程序在执行程序节点上运行,而本地文件系统是该执行程序的文件系统。 useRawLocalFileSystem仅阻止写入校验和文件(-> info),不会使文件出现在提交作业的计算机上,这可能是您期望的。

最好的办法是将文件保存到HDFS,并在作业完成后显式检索它们。