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