Mapreduce Spark:如何使用Spark设计流媒体?

Mapreduce Spark:如何使用Spark设计流媒体?,mapreduce,apache-spark,bigdata,distributed-computing,Mapreduce,Apache Spark,Bigdata,Distributed Computing,当前架构 具有RESTAPI抽象的MySQL数据库 问题 MySQL由于各种原因无法扩展,包括难以修复的数据模型设计 提议的架构 使用Cassandra作为NoSQL后端,使用Spark作为内存计算引擎以及Spark流 问题 卡桑德拉的连贯性有多好?决策是直接使用kafka流,将实时信息传输到Cassandra,然后使用Spark SQL查询该数据 如果上面的一致性很好,那么RDD是如何围绕这一点设计的,因为它们是不可变的。它们会创建新的RDD吗 另一种设计是将所有数据从MySQL迁移到Cas

当前架构

具有RESTAPI抽象的MySQL数据库

问题

MySQL由于各种原因无法扩展,包括难以修复的数据模型设计

提议的架构

使用Cassandra作为NoSQL后端,使用Spark作为内存计算引擎以及Spark流

问题

  • 卡桑德拉的连贯性有多好?决策是直接使用kafka流,将实时信息传输到Cassandra,然后使用Spark SQL查询该数据
  • 如果上面的一致性很好,那么RDD是如何围绕这一点设计的,因为它们是不可变的。它们会创建新的RDD吗
  • 另一种设计是将所有数据从MySQL迁移到Cassandra,然后使用kafka将消息直接发送给spark,spark实时处理这些数据,并使用下游系统最终将数据移交给Cassandra
在第1点和第2点中,一致性取决于Cassandra,在第3点中,一致性与Spark有关


哪种设计更好?有人能解释一下吗。

你有什么负担?你有很多写的东西吗?你唯一读的是Spark写的吗?您计划使用多少个节点?您的数据模型是什么?您是否有很多表间引用(外键)并且需要很多联接?也不确定为什么要将数据从cassandra传输到kafka,然后再传输到spark,为什么不直接插入cassandra?负载约为200个请求/秒,但大多是迭代的,即用于报告,因此,一旦数据进入内存,就无所谓了。与写入相比,读取更多。最多有4/5个连接,最多有2/3个表。我想你误解了最后一点。卡夫卡只是为了将数据输入spark/cassandra,我将使用spark与cassandra的直接连接。我的问题是,是直接将数据放入spark,还是将其放入cassandra,然后在spark中使用。
将所有数据从MySQL迁移到cassandra,然后使用kafka将消息直接发送到spark
这听起来像是在做MySQL->cassandra->kafka。无论如何,最近没有做过任何基准测试,但是卡桑德拉在阅读方面并不是最快的,检查一下是否有变化。任何形式的Cassandra(以及大多数NoSQL)的加入都是一个巨大的麻烦,所以要小心。我也不完全理解“RDD是如何围绕这一点设计的”?你所说的“他们是否创建了新的RDD?”是什么意思?很抱歉造成混淆。我的理解是RDD是不可变的,但spark streaming是数据连续流动的地方,所以当RDD是不可变的时,它如何处理数据的这种连续变化?当我指的是数据的变化时,新数据必须与旧数据结合起来进行查询。实际上,spark streaming是一种微批处理技术,当从中获取数据时,你不会得到一个
RDD
,而是一个
DStream
,在内部,一系列小的
RDD
s是否在数据以Spark流式方式(按时间窗口)进入新的(不可变的)
RDD
s时也是如此。您有什么样的负载?你有很多写的东西吗?你唯一读的是Spark写的吗?您计划使用多少个节点?您的数据模型是什么?您是否有很多表间引用(外键)并且需要很多联接?也不确定为什么要将数据从cassandra传输到kafka,然后再传输到spark,为什么不直接插入cassandra?负载约为200个请求/秒,但大多是迭代的,即用于报告,因此,一旦数据进入内存,就无所谓了。与写入相比,读取更多。最多有4/5个连接,最多有2/3个表。我想你误解了最后一点。卡夫卡只是为了将数据输入spark/cassandra,我将使用spark与cassandra的直接连接。我的问题是,是直接将数据放入spark,还是将其放入cassandra,然后在spark中使用。
将所有数据从MySQL迁移到cassandra,然后使用kafka将消息直接发送到spark
这听起来像是在做MySQL->cassandra->kafka。无论如何,最近没有做过任何基准测试,但是卡桑德拉在阅读方面并不是最快的,检查一下是否有变化。任何形式的Cassandra(以及大多数NoSQL)的加入都是一个巨大的麻烦,所以要小心。我也不完全理解“RDD是如何围绕这一点设计的”?你所说的“他们是否创建了新的RDD?”是什么意思?很抱歉造成混淆。我的理解是RDD是不可变的,但spark streaming是数据连续流动的地方,所以当RDD是不可变的时,它如何处理数据的这种连续变化?当我指的是数据的变化时,新数据必须与旧数据结合起来进行查询。实际上,spark streaming是一种微批处理技术,当从中获取数据时,你不会得到一个
RDD
,而是一个
DStream
,在内部,是一系列小的
RDD
s,所以当数据以Spark流式方式(按时间窗口)进入新的(不可变的)
RDD
s时,是的。