Hadoop 如何从Hdfs中删除中间输出文件

Hadoop 如何从Hdfs中删除中间输出文件,hadoop,mapreduce,hdfs,delete-file,Hadoop,Mapreduce,Hdfs,Delete File,我正在尝试使用删除mapreduce程序的中间输出目录 FileUtils.deleteDirectory(new File(tempFiles)); 但此命令不会从hdfs中删除目录。Map reduce不会在hdfs上写入中间结果,而是在本地磁盘上写入 每当映射器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序,并将这些结果溢出到本地磁盘 摘要是映射器生成的输出进入本地文件系统 只有在一种情况下,映射器才会将其输出写入hdfs,前提是在驱动程序类中已明确设置为不使用

我正在尝试使用删除mapreduce程序的中间输出目录

FileUtils.deleteDirectory(new File(tempFiles));

但此命令不会从hdfs中删除目录。

Map reduce不会在hdfs上写入中间结果,而是在本地磁盘上写入

每当映射器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序,并将这些结果溢出到本地磁盘

摘要是映射器生成的输出进入本地文件系统

只有在一种情况下,映射器才会将其输出写入hdfs,前提是在驱动程序类中已明确设置为不使用任何减速器


在上述情况下,将有最终输出,我们不会说它是中间的。

您使用的API错误!您应该使用apachefileutil而不是FileUtils。后者用于本地文件系统中的文件操作

我知道,由于名字相似,人们很容易选错名字。您当前的代码正在查看本地文件系统以删除该路径,而不会对HDFS产生任何影响

示例代码:

FileUtil.fullyDelete(new File("pathToDir"));
另一方面,您可以使用文件系统api本身,它有一个delete方法。不过,您需要获取文件系统对象。例如:

filesystem.delete(new Path("pathToDir"), true); 

第二个参数是递归标志

对不起,我收回我的第一句话。虽然您的解释是正确的,但如果他提供了本地上的中间文件的正确路径,那么他当前的代码应该可以正常工作。无论如何,想一想,谁想要手动删除MR作业的中间文件,而默认情况下清理是自动的。看看