我使用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