【问题标题】:How to store Cassandra table in Spark memory for long time?如何将 Cassandra 表长期存储在 Spark 内存中?
【发布时间】:2016-11-07 09:26:40
【问题描述】:

我正在使用 Spark 和 Spark-Cassandra 连接器从 Cassandra 聚合我的数据。我有一个带有单个共享 SparkContext 和 REST api 的 Web 应用程序。处理有下一个流程:

  1. 读取 Cassandra 表
  2. 准备过滤(Spark 转换序列)
  3. 根据api调用参数过滤准备好的RDD

在上述算法中,每个调用只有第三步不同(取决于 api 请求参数)。 Api 请求以并行模式执行(每个请求线程)。由于表中的数据不是很动态,并且我的 spark 工作人员有足够的内存来存储整个表,所以我想在第二步之后持久化我的 RDD,并且在每个请求上只过滤已经持久化的 RDD。我也想定期更新这个 RDD。实现它的最佳方法是什么?

【问题讨论】:

  • 我不确定我是否正确理解您想要的内容。您的 RDD 是否需要在不同的上下文之间共享?否则,一个简单的persist 应该可以解决问题。
  • @Hawknight 不,我只有一个上下文。我可以将我的持久表存储在 scala 对象中吗?
  • 好吧,如果你的表被转换为 RDD,你可以简单地持久化你的 RDD 并为你的后续调用保留对持久化 RDD 的引用(技术上只在调用操作时持久化)变量。

标签: apache-spark cassandra spark-cassandra-connector


【解决方案1】:

您可以在第 2 步之后在 RDD 上调用 persist。当第一个操作被调用时,RDD 将被计算并缓存。当您需要刷新数据时,只需调用unpersist。这将导致 Spark 删除旧缓存,然后在执行操作时存储新缓存。基本上,你会做这样的事情。

var data = loadAndFilter()
while (!stop) {
  data.persist()
  // Do step 3

  // Drop the old cache
  data.unpersist(false)
  // Load the fresh data
  data = loadAndFilter()
}

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 2018-10-31
    • 2017-08-29
    • 2016-03-22
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多