[英]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.