我正在尝试使用
删除mapreduce程序的中间输出目录FileUtils.deleteDirectory(new File(tempFiles));
但此命令不会从hdfs中删除目录。
答案 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
第二个参数是递归标志。