我正在尝试使用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} }。使用此方法,我们可以避免将文件写入执行者节点。
有什么想法吗?
答案 0 :(得分:0)
我使用了copyToLocalFile方法,该方法使useRawLocalFileSystem的第4个参数重载并将其设置为true。使用此方法,我们可以避免将文件写入执行者节点。
我认为您认为这一点是错误的。群集模式使驱动程序在执行程序节点上运行,而本地文件系统是该执行程序的文件系统。 useRawLocalFileSystem
仅阻止写入校验和文件(-> info),不会使文件出现在提交作业的计算机上,这可能是您期望的。
最好的办法是将文件保存到HDFS,并在作业完成后显式检索它们。