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

时间:2014-10-30 04:19:24

标签: hadoop mapreduce hdfs delete-file

我正在尝试使用

删除mapreduce程序的中间输出目录
FileUtils.deleteDirectory(new File(tempFiles));

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

2 个答案:

答案 0 :(得分:0)

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

每当映射器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时,会将分区和排序发生在本地磁盘中。

汇总是mapper生成的输出进入本地文件系统。

只有在一个条件映射器中才会将其输出写入hdfs,具体如果它已在驱动程序类中设置为不使用任何reducer。

在上述情况下,我们不会说出最终输出结果。

答案 1 :(得分:0)

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

https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/FileUtil.html#fullyDelete    http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html

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

示例代码:

FileUtil.fullyDelete(new File("pathToDir"));

另一方面,您可以使用具有方法FileSystem的{​​{1}} api本身。您需要获取delete对象。例如:

FileSystem

第二个参数是递归标志。