当前位置: 首页 > 知识库问答 >
问题:

缓存与本地检查点以及如何阻止火花删除它?

谢运良
2023-03-14

我知道localCheckpoint删除了重建RDD所需的历史记录。并且缓存正在保存RDD的当前状态,因此不需要重建它。

然而,我在一些方面感到困惑。如果我做了<code>localCheckpoint</code>,并且我稍后在代码中需要这个RDD,那么我经常会得到一个<code>异常</code〕,说明分区是如何找不到的。

我查看了SparkUI中的存储选项卡,它说只有一小部分RDD被保存,比如17%。

所以我读了更多,意识到火花会丢弃旧的RDD。有没有办法让火花永远保留它?

另外,如果我使用的是< code>cache而不是< code>localCheckpoint,问题会解决吗?但这需要时间,因为Spark必须重新计算分区?

总的来说,我只是想在我工作的很大一部分时间里在内存中保留一个RDD,以便能够在最后将它合并回来,但当我到达那里时,Spark已经删除了它。我该如何解决这个问题?

执行< code > local check point . cache 或< code > cache . local check point 有什么作用吗?还是非此即彼就够了?

共有2个答案

郤玉书
2023-03-14

设置spark.dynamicAllocation.cachedExecutorIdleTimeout为高值,如果您想在工作的很长一段时间内将RDD保留在内存中。

单于奕
2023-03-14

是否有理由需要使用本地检查点与检查点?当使用本地检查点时,您的截断没有复制,速度更快,但可靠性要低得多,这可能是您遇到问题的地方。

保存位置的一般差异:

缓存正在保存到内存(如果内存到磁盘太大),检查点将直接保存到磁盘<如果内存已满,则可以覆盖code>cache和persistent(如果您自己或其他人正在同一个集群上工作,则可以由他们自己或他人),并且如果您的集群终止或重新启动,则会清除它们checkpoint将持久化到HDFS或本地存储,只有手动执行时才会删除。每个都有不同的目的。

更多详情(强烈推荐阅读):

https://github.com/JerryLead/SparkInternals/blob/master/markdown/english/6-CacheAndCheckpoint.md

做localCheckpoint.cache或cache.localCheckpoint有什么作用吗?还是一个或另一个就足够了?

在检查点之前缓存checkpoint在它自己的作业上运行,因此如果RDD被缓存,它将从缓存中提取,而不是重新运行它。

 类似资料:
  • 我们正在构建一个使用Spark Streaming和Kafka的容错系统,并且正在测试Spark Streaming的检查点,以便在Spark作业因任何原因崩溃时可以重新启动它。下面是我们的spark过程的样子: Spark Streaming每5秒运行一次(幻灯片间隔),从Kafka读取数据 Kafka每秒大约接收80条消息 我们想要实现的是一个设置,在这个设置中,我们可以关闭spark流作业(

  • 我有以下应用程序(我对这个框架很陌生),我想看到缓存大小(增加),因为它从队列中读取消息,但它一直保持为0。 有人能告诉我缺失了什么/错了什么吗? 谢谢!

  • del 清空指定缓存 await this.app.redis.del('name') flushall 清空所有缓存 await this.app.redis.flushall() lpop 从数组最左边删除一项 await this.app.redis.lpop('userList') rpop 从数组最右边删除一项 await this.app.redis.rpop('userList')

  • 问题内容: 我目前正在尝试混淆一系列库。我的基础库包含几个使用类型参数的类和方法,由于Proguard混淆消除了类型参数,其他代码无法使用我的基础库。消除混淆消除了这些问题。我已经阅读了所有ProGuard使用文档,示例和故障排除信息,但无法找到有关如何处理类型参数或ProGuard剥离类型参数的任何文档。 构造函数类型参数问题: 库1包含以下类: 库2包含几个扩展上述类的类,但构造函数会引发编译

  • 我已在登录时在本地存储中设置了身份验证令牌,并在注销时将其清除。注销后,如果用户尝试再次登录,则从缓存中获取旧的身份验证令牌,而不是新设置的值。如何在清除本地存储时清除缓存。我在应用程序中使用angular 2。 登录: 注销:

  • Serenity 提供一些缓存抽象和实用功能让你更容易地使用本地缓存。 术语 本地(local) 的意思是指在本地内存中缓存项目(因此没有涉及到序列化)。 当你的应用程序在网站群(web farm) 中部署时,本地缓存可能还不够或者有时合适。我们将在 分布式缓存 章节中讨论该场景。

  • 我使用Drupal 7最新的开发版本。 我已经安装了清漆和过期模块并设置它们。它们工作得很好,但是我有一个关于从清漆中删除缓存的问题。 问题是如何只删除索引(主页)页面的清漆缓存,而不删除其他页面的缓存。我看了清漆日志,发现每次Drupal执行命令时,整个清漆缓存都被删除了 此命令由varnish模块或expire模块执行,它表示删除主页(索引)页的缓存。但正如我看到的,它正在删除varnish中