使用火花流从数据库流式读取

Posted

技术标签:

【中文标题】使用火花流从数据库流式读取【英文标题】:Stream reading from database using spark streaming 【发布时间】:2016-06-02 13:12:47 【问题描述】:

我想使用 Spark Streaming 从 mysql 等 RDBMS 数据库中读取数据。

但我不知道如何使用 JavaStreamingContext 来做到这一点

 JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.milliseconds(500));
DataFrame df = jssc. ??

我在互联网上搜索,但没有找到任何东西

提前谢谢你。

【问题讨论】:

【参考方案1】:

如果不安装某些第三方软件,您将无法做到这一点。 您可以做的是创建一个个性化的接收器,它可以使用 SparkSQL 包和 Streaming 组合来满足您的需求。 实现一个扩展 Receiver 的类,并在内部执行从数据库中提取数据所需的所有连接和查询。 我现在正在工作,所以我给你一个链接来查看而不是生成代码,对不起:http://spark.apache.org/docs/latest/streaming-custom-receivers.htmlhttps://medium.com/@anicolaspp/spark-custom-streaming-sources-e7d52da72e80

【讨论】:

【参考方案2】:

最好和可靠的解决方案是完全避免使用 MySqL。当您将记录插入 MySQl 时,通过事务将它们也放入 Kafka(Kafka 生产者),然后在您的流应用程序中使用它们。

【讨论】:

【参考方案3】:

我认为不可能从 MySql 流式传输。可以从许多来源获取数据,例如 Kafka、Flume、Twitter、ZeroMQ、Kinesis 或 TCP 套接字。

【讨论】:

不,我想每 x 秒从我的数据库中选择最新数据。我确信这是可能的,但我是 spark 的新手,所以我不知道该怎么做 我已经在source和storm之间使用rabbitmq,但是storm应该把数据保存到我的数据库中,然后spark从数据库中读取数据来做他的工作 也无法在数据库和 spark 之间使用代理 同时使用 spark 和storm 是相当重复的。如果我不了解您的数据管道,则很难找到解决方案:) 我认为您应该使用 rabbitMQ 作为 spark 的输入并跳过 Storm 和 mysql。您可以使用github.com/Stratio/Spark-RabbitMQ。 MySQL可以输出spark。 现在storm和spark有很大的区别,Storm处理事件,spark使用微批处理,spark也有一些机器学习包。在我的用例中,storm从rabbitmq接收数据并组织这些数据,然后spark应该使用微批处理从数据库中读取来运行他的机器学习库。所以我必须使用火花流从数据库中读取

以上是关于使用火花流从数据库流式读取的主要内容,如果未能解决你的问题,请参考以下文章

net.jpounz.lz4 使用火花流从 kafka 读取时出现异常

有没有办法修改此代码以让火花流从 json 中读取?

使用 json 文件触发流式传输

如何在火花结构化流式读取流中倒带 Kafka 偏移

结构化流式传输:具有流式传输源的查询必须使用 writeStream.start() 执行

如何在火花流中刷新加载的数据帧内容?