使用 ForeachWriter 在 Spark 流中实现 Cassandra 接收器

Posted

技术标签:

【中文标题】使用 ForeachWriter 在 Spark 流中实现 Cassandra 接收器【英文标题】:Implementation of Cassandra sink in Spark streaming using ForeachWriter 【发布时间】:2019-02-23 17:01:03 【问题描述】:

显然,Spark 流中没有对 Cassandra 接收器的内置支持。我在网上找到了这个示例,它为基于 ForEachWriter 的 Spark 结构化流实现了自定义 Cassandra 接收器:

https://dzone.com/articles/cassandra-sink-for-spark-structured-streaming

我知道我们需要创建一个 ForeachWriter 实现来负责打开与接收器 (Cassandra) 的连接、写入数据和关闭连接。所以CassandraSinkForeachCassandraDriver 类是有意义的。

但是,我不需要使 SparkSessionBuilder 可序列化,甚至不需要在 CassandraDriver 类中初始化 SparkSession 实例。似乎这样做的唯一原因是从 sparkConf 初始化 CassandraConnector

根据CassandraConnector 文档,CassandraConnector 对象可以从传入的 CassandraConnectorConfig 初始化:http://datastax.github.io/spark-cassandra-connector/ApiDocs/2.4.0/spark-cassandra-connector/#com.datastax.spark.connector.cql.CassandraConnector

有人可以解释是否需要在工作人员中初始化 SparkSession 吗?这是一个通用模式吗?如果是,为什么会有这样的要求?

【问题讨论】:

【参考方案1】:

如果您可以升级到 Spark 2.4,则可以使用 ForEachBatch,您可以在流式数据帧之上应用批处理编写器。

【讨论】:

正确,但请注意,如果您想使用连续处理模式,这不起作用:spark.apache.org/docs/latest/… 请更新您的问题,并添加有关连续处理模式的信息:)

以上是关于使用 ForeachWriter 在 Spark 流中实现 Cassandra 接收器的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark 上下文中使用多个同时作业的 Spark 2 作业监控 (JobProgressListener)

如何在 Zeppelin 中切换 Spark 版本以使用 Spark 3.x

在 JAVA 中使用 Spark 2.1.1 读取嵌套 Json(Spark 2.2 有解决方案,但我正在研究 spark 2.1.1 版本)

Spark(11)——使用spark在yarn上运行,关闭Application

使用python在spark中加载pcap文件

Spark:使用 Spark Scala 从 Kafka 读取 Avro 消息