簡體   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