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

0aydgbwb  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(407)

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

FileUtils.deleteDirectory(new File(tempFiles));

但是这个命令不会从hdfs中删除目录。

67up9zun

67up9zun1#

你用错api了!你应该使用apache FileUtil 相反 FileUtils . 后者用于本地文件系统中的文件操作。
https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/fileutil.html#fullydeletehttphttp://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);

第二个参数是递归标志。

bprjcwpo

bprjcwpo2#

map reduce不在hdfs上写入中间结果,而是在本地磁盘上写入。
每当Map器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序,它将这些结果溢出到本地磁盘。
摘要是由Map器生成的输出进入本地文件系统。
只有在一种情况下,Map器才会将其输出写入hdfs,如果在driver类中设置为不使用任何缩减器。
在上述情况下,将有最终输出,我们不会说它的中间。

相关问题