繁体   English   中英

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

[英]How to delete intermediate output file from Hdfs

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

FileUtils.deleteDirectory(new File(tempFiles));

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

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

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

映射器产生的摘要输出进入本地文件系统。

如果在驱动程序类中明确设置了不使用任何减速器,则只有在一种情况下,映射器才会将其输出写入hdfs。

在上述情况下,将有最终输出,我们将不说其中间值。

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

https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/fs/FileUtil.html#fully 删除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); 

第二个参数是递归标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM