fob*_*122 5 scala out-of-memory apache-spark spark-streaming
我有一个循环操作,它生成一些 RDD,进行重新分区,然后进行聚合键操作。循环运行一次后,它会计算出最终的 RDD,该 RDD 会被缓存和检查点,并用作下一个循环的初始 RDD。
这些 RDD 非常大,并且在每次迭代到达最终 RDD 之前都会生成大量中间 shuffle 块。我正在压缩我的随机播放并允许随机播放到磁盘。
我注意到在我的工作机器上,存储随机播放文件的工作目录没有被清理。因此最终我用完了磁盘空间。我的印象是,如果我检查 RDD,它将删除所有中间的 shuffle 块。然而这似乎并没有发生。有人知道如何在每次循环迭代后清理我的随机播放块,或者为什么我的随机播放块没有被清理吗?
将 RDD 缓存到内存/磁盘后,只要 Spark 上下文处于活动状态,RDD 就会存储在您的内存/磁盘中。
为了告诉驱动程序它可以从内存/磁盘中删除 RDD,您需要使用该unpersist()函数。
来自
java-doc:Run Code Online (Sandbox Code Playgroud)/** * Mark the RDD as non-persistent, and remove all blocks for it from memory and disk. * * @param blocking Whether to block until all blocks are deleted. * @return This RDD. */ def unpersist(blocking: Boolean = true)
所以你可以使用:
rdd.unpersist()
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |