hadoop fileutils无法从scala在本地(unix)文件系统上写入文件

46scxncf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

我想把文件写到本地 FileSystem 使用的文件系统库 org.apache.hadoop.fs . 下面是我在大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` 设置为 `true` . 使用它,我们可以避免在executor节点上写入文件。
有什么想法吗?
oaxa6hgo

oaxa6hgo1#

我使用copytolocalfile方法重载userawlocalfilesystem的第4个参数并将其设置为true。使用它,我们可以避免在executor节点上写入文件。
我想你错了。集群模式使驱动程序运行在执行器节点上,本地文件系统是执行器的文件系统。 useRawLocalFileSystem 只防止写入校验和文件(->信息),它不会使文件出现在提交作业的计算机上,这可能是您所期望的。
最好的办法是将文件保存到hdfs,并在作业完成后显式检索它们。

相关问题