使用Spark Streaming从数据库中进行流式读取

3

我希望使用Spark Streaming从像MySQL这样的关系型数据库中读取数据。

但是我不知道如何使用JavaStreamingContext实现。

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

我在互联网上搜索了但没有找到任何内容。
提前感谢你。
3个回答

5
你不能这样做,需要安装第三方软件才行。
你可以通过使用SparkSQL包和Streaming包创建一个自定义的接收器来实现你想要的功能。
实现一个扩展Receiver类的类,在其中进行所有必要的连接和查询以从数据库中获取数据。
由于我现在在工作,所以抱歉无法提供代码,但是以下链接可以帮助您:
http://spark.apache.org/docs/latest/streaming-custom-receivers.html
https://medium.com/@anicolaspp/spark-custom-streaming-sources-e7d52da72e80


1
最好的可行和可靠的解决方案是尽量避免使用MySQL。当你将记录插入到MySQL时,通过事务将它们同时放入Kafka(Kafka生产者),然后在流应用程序中使用它们。

0

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


不,我想每隔x秒从我的数据库中选择最新的数据。我相信这是可能的,但我是spark的新手,不知道如何做到这一点。 - h.zak
我已经在源和Storm之间使用了RabbitMQ,但是Storm应该将数据保存到我的数据库中,然后Spark从数据库中读取数据来完成它的工作。 - h.zak
1
使用Spark和Storm一起可能会有重复的问题。如果我不了解你的数据管道,很难找到解决方案 :) 我认为你应该将RabbitMQ作为Spark的输入,跳过Storm和MySQL。您可以使用https://github.com/Stratio/Spark-RabbitMQ。MySQL可以成为Spark的输出。 - Przemek
现在,Storm和Spark之间存在很大的区别。Storm基于事件工作,而Spark使用微批处理,此外,Spark还有一些用于机器学习的包。在我的用例中,Storm从RabbitMQ接收数据并组织这些数据,然后Spark应该使用微批处理从数据库中读取数据以运行其机器学习库。因此,我必须使用Spark Streaming从数据库中读取数据。 - h.zak
为什么要使用内存?例如,您可以使用Cassandra来存储传感器事件。我认为MySQL在处理大数据方面的扩展性不好。 - Przemek
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接