Spark Streaming:读取和写入状态信息到外部数据库,如 cassandra

Posted

技术标签:

【中文标题】Spark Streaming:读取和写入状态信息到外部数据库,如 cassandra【英文标题】:Spark Streaming : Reading and writing state info to external database like cassandra 【发布时间】:2016-06-09 15:45:25 【问题描述】:

火花流:

当 Spark Streaming 应用程序发生代码更改时,我必须清理检查点以部署新更改。实际上,我正在失去历史状态,这真的很糟糕。

除了常规的检查点之外,spark 默认提供了一种方法,我们可以从 Cassandra 等外部数据库中保存和重建状态信息吗?

能否请您指出一些这方面的编码示例。

【问题讨论】:

我需要维护 Spark 流状态,以便在该上下文中处理传入事件。因此,我们无法避免检查点。我的问题是如何定期将 Spark 流状态 RDD(不是 OUTPUT 数据)保存到外部数据存储中,让我们说每 12 小时一次? 【参考方案1】:

如果您使用像 Kafka 直接 API 这样的无接收器方法,那么您可以获取主题读取的偏移量并将其存储到 Cassandra(或任何数据库)。在您的初始化中,您必须从 Cassandra 读取偏移量并在直接 API 中使用它。通过这种方式,您可以避免检查点并轻松升级您的 jar。

要访问 dstream 中的偏移量,可以在此处查看示例 offset reading example

【讨论】:

我需要维护 Spark 流状态,以便在该上下文中处理传入事件。因此,我们无法避免检查点。我的问题是如何定期将 Spark 流状态 RDD(不是 OUTPUT 数据)保存到外部数据存储中,让我们说每 12 小时一次?

以上是关于Spark Streaming:读取和写入状态信息到外部数据库,如 cassandra的主要内容,如果未能解决你的问题,请参考以下文章

Spark Streaming - 从Kafka读取json并将json写入其他Kafka主题

使用 Spark Structured Streaming 从多个 Kafka 主题读取并写入不同接收器的最佳方式是啥?

如何使用Spark Streaming读取HBase的数据并写入到HDFS

混合 Spark Structured Streaming API 和 DStream 写入 Kafka

spark streaming 读取kafka两种方式的区别

Spark Streaming 重用物理计划