清除保留在 Spark 节点上的 RDD 数据



如果任务失败,会清除持久化的RDD(StorageLevel.MEMORY_ONLY_SER),并在任务尝试从头开始时再次重新计算它们。还是会附加缓存的 RDD。

如果持久RDD出现任何任务失败,我看到重复记录。任何帮助将不胜感激。

任务是为计算RDD分区而启动的最小的单个执行单元。 如果任务失败,运行方法会通知 TaskContextImpl 任务失败。运行请求 MemoryStore 为此任务释放展开内存(对于ON_HEAP和OFF_HEAP内存模式),ContextCleaner 是一个 Spark 服务,负责在应用程序范围内清理随机播放、RDD、广播、累加器和检查点 RDD

众所周知,RDD是弹性的,即在RDD沿袭图的帮助下具有容错能力,因此能够重新计算由于节点故障而丢失或损坏的分区。

缓存计算并具体化内存中的RDD,同时跟踪其沿袭(依赖关系)。由于缓存会记住RDD的世系,因此Spark可以在节点发生故障时重新计算丢失分区。最后,缓存的RDD存在于正在运行的应用程序的上下文中,一旦应用程序终止,缓存的RDD也会被删除。 Spark的缓存是容错的——如果RDD的任何分区丢失,它将使用最初创建它的转换自动重新计算。

如果RDD保留在内存中,则在任务失败时执行器JVM进程也会失败,因此释放内存。 如果RDD保留在磁盘上,则任务失败 Spark关闭钩子只是擦除临时文件

你可以调用

rdd.unpersist()

以清除缓存的 RDD。

最新更新