我正在尝试使用删除mapreduce程序的中间输出目录
FileUtils.deleteDirectory(new File(tempFiles));
但是这个命令不会从hdfs中删除目录。
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
FileUtils
FileUtil.fullyDelete(new File("pathToDir"));
另一方面,你可以利用 FileSystem api本身有一个方法 delete . 你得去拿钥匙 FileSystem 但我反对。如:
FileSystem
delete
filesystem.delete(new Path("pathToDir"), true);
第二个参数是递归标志。
bprjcwpo2#
map reduce不在hdfs上写入中间结果,而是在本地磁盘上写入。每当Map器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序,它将这些结果溢出到本地磁盘。摘要是由Map器生成的输出进入本地文件系统。只有在一种情况下,Map器才会将其输出写入hdfs,如果在driver类中设置为不使用任何缩减器。在上述情况下,将有最终输出,我们不会说它的中间。
2条答案
按热度按时间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产生任何影响。
示例代码:
另一方面,你可以利用
FileSystem
api本身有一个方法delete
. 你得去拿钥匙FileSystem
但我反对。如:第二个参数是递归标志。
bprjcwpo2#
map reduce不在hdfs上写入中间结果,而是在本地磁盘上写入。
每当Map器产生输出时,它首先进入内存缓冲区,当缓冲区超过其默认容量时进行分区和排序,它将这些结果溢出到本地磁盘。
摘要是由Map器生成的输出进入本地文件系统。
只有在一种情况下,Map器才会将其输出写入hdfs,如果在driver类中设置为不使用任何缩减器。
在上述情况下,将有最终输出,我们不会说它的中间。