如果任务失败,确实会激活持久的RDD(StorageLevel.MEMORY_ONLY_SER),并在尝试从头开始尝试重新计算它们时再次重新计算它们。或者是否会附加缓存的RDD。
如果持久RDD的任何任务失败,我会看到重复记录。任何帮助将不胜感激。
答案 0 :(得分:0)
任务是为计算RDD分区而启动的最小的单个执行单元。 如果任务失败,则run方法通知TaskContextImpl任务已失败.Run请求MemoryStore释放此任务的展开内存(适用于ON_HEAP和OFF_HEAP内存模式),ContextCleaner是一个Spark服务,负责应用程序范围内的shuffle清理,RDD,广播,累加器和检查点RDD
我们知道RDD具有弹性,即在RDD沿袭图的帮助下具有容错能力,因此能够重新计算由于节点故障而丢失或损坏的分区。
缓存计算并实现内存中的RDD,同时跟踪其沿袭(依赖性)。由于缓存会记住RDD的沿袭,因此Spark可以在节点发生故障时重新计算丢失分区。最后,缓存的RDD存在于正在运行的应用程序的上下文中,一旦应用程序终止,缓存的RDD也会被删除。 Spark的缓存是容错的 - 如果丢失了RDD的任何分区,它将使用最初创建它的转换自动重新计算。
如果RDD持久存储在内存中,则任务失败执行程序JVM进程也会失败,因此内存将被释放。 如果RDD持久存储在磁盘上,则在任务失败时,Spark关闭挂钩只会擦除临时文件
答案 1 :(得分:0)
你可以打电话
GridLayout.LeftToRight
清除缓存的rdd。