Events 连续查询的Cassandra(+;Spark?)的最佳方法?
我们目前正在使用Hazelcast()作为分布式内存数据网格。这对我们来说工作得很好,但是在我们的用例中,只在内存中运行已经耗尽了它的路径,我们正在考虑将我们的应用程序移植到NoSQL持久存储。在通常的比较和评估之后,我们接近于选择卡桑德拉,并最终选择Spark进行分析 尽管如此,在我们的体系结构需求中仍然存在一个缺口,我们还没有掌握如何在Cassandra中解决这个缺口(有或没有Spark):Hazelcast允许我们创建一个连续查询,无论何时从子句的resultset中添加/删除/修改一行,Hazelcast都会调用相应的通知。我们使用它通过AJAX流不断地更新客户机,使其具有新的/更改的行 这可能是我们正在进行的概念上的不匹配,所以-如何在Cassandra中最好地解决这个用例(有或没有Spark的帮助)?API中是否有允许对键/子句更改进行连续查询的内容(尚未找到)?是否有其他方法获取密钥/子句更新流?某种事件 我知道,我们最终可以定期轮询Cassandra,但在我们的用例中,客户可能对大量的表子句通知感兴趣(想想“加利福尼亚海岸线上船舶位置的所有变化”),在商店外迭代会破坏拖缆的可伸缩性 因此,一个神奇的问题是:我们错过了什么?卡桑德拉是做这项工作的错误工具吗?我们是否不知道apache领域内外的API或外部库的特定部分允许这样做 非常感谢您的帮助Events 连续查询的Cassandra(+;Spark?)的最佳方法?,events,cassandra,apache-spark,cassandra-2.0,Events,Cassandra,Apache Spark,Cassandra 2.0,我们目前正在使用Hazelcast()作为分布式内存数据网格。这对我们来说工作得很好,但是在我们的用例中,只在内存中运行已经耗尽了它的路径,我们正在考虑将我们的应用程序移植到NoSQL持久存储。在通常的比较和评估之后,我们接近于选择卡桑德拉,并最终选择Spark进行分析 尽管如此,在我们的体系结构需求中仍然存在一个缺口,我们还没有掌握如何在Cassandra中解决这个缺口(有或没有Spark):Hazelcast允许我们创建一个连续查询,无论何时从子句的resultset中添加/删除/修改一行,
Hugo我不是spark方面的专家,所以对此持保留态度,但也许你可以使用这样的方法:
val notifications = ssc.whateverSourceYouHaveThatGivesADstream(...)
notifications.foreachRDD(x => {
x.foreachPartition(x => {
cassandraConnector.withSessionDo(session => {
x.foreach(y => {
//use session to update cassandra
// broadcast via AJAX or send to proxy to broadcast
})
})
})
})
当新客户端启动时,他们将首先查询(从)Cassandra以获取所有船只的当前位置,然后从spark应用程序推送对该数据的实时更新。使用spark streaming。需要更新时,执行两个操作:
val notifications = ssc.whateverSourceYouHaveThatGivesADstream(...)
notifications.foreachRDD(x => {
x.foreachPartition(x => {
cassandraConnector.withSessionDo(session => {
x.foreach(y => {
//use session to update cassandra
// broadcast via AJAX or send to proxy to broadcast
})
})
})
})
希望有帮助。查看Spark作业服务器
你可能想看看
它允许您在不同的工作之间共享spark上下文,从而兑现RDD
并为spark提供了一个restful API,用于近实时(基于刷新缓存的频率)查询。可能会有所帮助。它支持从cassandra表进行流式处理:
import com.datastax.spark.connector.streaming._
val ssc = new StreamingContext(sparkConf, Seconds(1))
val rdd = ssc.cassandraTable("streaming_test", "key_value").select("key", "value").where("fu = ?", 3)
你检查过卡桑德拉触发器()了吗?嗨。谢谢是的,我有-问题是触发器在Cassandra的写入路径中,在那里放置通知/进一步写入可能会严重阻碍Cassandra众所周知的写入性能-我试图避免这些:)