删除中间输出文件中尝试使用我如何从HDFS
FileUtils.deleteDirectory(new File(tempFiles));
删除的MapReduce程序的中间输出目录,但该命令没有从HDFS删除目录。
删除中间输出文件中尝试使用我如何从HDFS
FileUtils.deleteDirectory(new File(tempFiles));
删除的MapReduce程序的中间输出目录,但该命令没有从HDFS删除目录。
映射reduce不会在hdfs上编写中间结果,而是写入本地磁盘。
每当映射器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序时,会将这些结果泄漏到本地磁盘中。
摘要是由mapper生成的输出进入本地文件系统。
只有在一种情况下,mapper会将其输出写入hdfs,如果明确地说它已经在驱动程序类中设置为不使用任何reducer。
在上面的情况下会有最终的输出,我们不会说它的中间。
您正在使用错误的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
API本身具有方法delete
的。尽管你需要获得FileSystem
对象。例如:
filesystem.delete(new Path("pathToDir"), true);
第二个参数是递归标志。
你应该得到-1。 – blackSmith 2014-10-30 05:12:40
为什么我错了? – user3484461 2014-10-30 05:16:17
我收回我的第一条评论,对不起。尽管你的解释是正确的,但是如果他提供了中间文件的正确路径(当地文件),他的当前代码应该工作。无论如何,想一次,谁想要手动删除MR作业的中间文件,当清理是默认自动。看看http://stackoverflow.com/questions/7867608/hadoop-mapreduce-intermediate-output – blackSmith 2014-10-30 05:35:12