我使用saveAsObjectFile保存RDD,以便臨時文件分佈在驅動程序和執行程序中。在程序結束時,我想刪除所有這些文件。如何刪除它們?刪除火花驅動程序和執行程序上的臨時文件
回答
沒有通過Spark刪除數據的內置支持。但是,您可以在原始RDD上使用foreachPartition
在每個分區上運行任意任意一段代碼,這意味着 - 每個實際保存一些數據的執行程序至少運行一次。所以 - 如果你運行的代碼刪除了你保存到的文件夾(如果它在同一個執行器上運行多次,不會失敗,因爲一個執行器可以容納多個分區),你會得到你需要什麼。
例如,使用Apache Commons:中
// save
rdd.saveAsObjectFile("/my/path")
// use data...
// before shutting down - iterate over saved RDD's partitions and delete folder:
import org.apache.commons.io.FileUtils
rdd.foreachPartition(i =>
// deleteDirectory doesn't fail if directory does not exist
FileUtils.deleteDirectory(new File("/my/path"))
)
編輯:注意,這是一個有點哈克,而且也不可能是100%防彈:例如,如果應用程序執行的一個過程執行程序崩潰,其分區可能會在其他執行程序上重新計算,因此該執行程序上的數據不會被刪除。
非常感謝,需要我重新分配這個rdd並將分區編號設置爲等於我的火花執行器的數量?否則,如果我爲火花系統的並行設置了大量數據,那麼在執行器中刪除的時間太多。 – user1803467
如果確實分區數量非常大,重新分區可能會有所幫助,但由於這是一項快速操作(對於大多數分區,它只會檢查文件是否存在),我會按原樣嘗試並僅在必要時進行優化。 –
非常感謝,我會嘗試你的建議。 – user1803467
- 1. 使用s3a獲取驅動程序和執行程序中的火花瓶
- 2. DSE 4.7和火花SQL驅動程序
- 3. 將參數從驅動程序傳遞到火花執行器
- 4. 火花驅動程序或執行程序是否創建數據庫連接?
- 5. 指定火花提交的火花驅動程序
- 6. 只允許一個驅動程序在火花集羣上執行
- 7. java.lang.IllegalStateException:驅動程序可執行文件不存在chrome驅動程序
- 8. 火花流驅動程序進程內存不足
- 9. 啓動執行程序的火花機制
- 10. 程序運行時刪除類文件?
- 11. 執行火花流動作順序
- 12. 程序終止時臨時文件刪除
- 13. 如何刪除應用程序崩潰中的臨時文件
- 14. 程序員的責任是刪除臨時文件
- 15. 刪除Web應用程序的臨時文件
- 16. 處理火花驅動程序中的Hive記錄
- 17. 多重火花驅動程序的Java選項提交
- 18. Apache的火花JDBC連接讀寫驅動程序丟失
- 19. Eclipse應用程序刪除按鈕並自動執行程序
- 20. 火花上的應用程序網頁?
- 21. Mongo C#驅動程序不刪除
- 22. Hsqldb驅動程序被隨機刪除
- 23. devcon在Windows 7 - 刪除驅動程序
- 24. 完全刪除Windows XP中的驅動程序文件
- 25. 如果程序失敗,Python不會刪除臨時文件
- 26. 從ASP.Net中刪除應用程序臨時文件
- 27. 垃圾清理程序無法刪除臨時文件夾
- 28. 火花內存使用集中在驅動程序/主
- 29. 執行上下文驅動的編程
- 30. Java臨時文件和自動刪除
可能的重複http://stackoverflow.com/questions/30093676/apache-spark-does-not-delete-temporary-directories?rq=1 – Rumoku
非常感謝。但是這篇文章主要是關於由spark系統創建的臨時文件。我的文件是由我的應用程序創建的。 – user1803467