Cassandra + Spark用于实时分析

时间:2016-04-13 11:30:00

标签: apache-spark cassandra spark-streaming spark-dataframe

我正在开发“大数据实时渲染(空间数据)”的应用程序。 在Spark Streaming + Spark SQL + WebSocket的帮助下,我能够在仪表板上呈现预定义的查询。但我想通过交互式查询和即席查询来获取数据。

为此,我试图用“Spark Streaming + Cassandra”实现它。这些查询需要聚合并过滤大量数据。

我是Cassandra和Spark的新手,所以我对下面的方法很困惑,这会更好\更快:

  1. Spark Streaming - >过滤(Spark) - >保存到Cassandra - >交互式查询 - > UI(仪表板)
  2. Spark Streaming - >过滤(Spark) - >保存到Cassandra - > Spark SQL - >互动查询 - > UI(仪表板)
  3. Cassandra会快到足以实时提供结果吗?或者我应该从Cassandra创建一个RDD来对其执行交互式查询。

    其中一个问题是:

    "SELECT *  FROM PERFORMANCE.GEONAMES A  INNER JOIN  
    (SELECT max(GEONAMEID) AS MAPINFO_ID FROM  PERFORMANCE.GEONAMES
    where longitude between %LL_LONG% and %UR_LONG% 
    and latitude between %LL_LAT% and %UR_LAT%  
    and %WHERE_CLAUSE% GROUP BY LEFT(QUADKEY, %QUAD_TREE_LEVEL%)  )
    AS B ON A.GEONAMEID = B.MAPINFO_ID"
    

    任何意见或建议将不胜感激。谢谢,

    感谢@doanduyhai建议SASI二级指数,它确实产生了巨大的差异。

2 个答案:

答案 0 :(得分:2)

  

Cassandra会快到足以实时提供结果吗?或者我应该从Cassandra创建一个RDD来对其执行交互式查询。

这取决于您预先做了多少过滤以及群集中的计算机数量。如果你的Cassandra表有1Tb的数据并且你在内存中查询100Gb的数据,假设有10台机器的集群,这意味着在内存中加载1Gb它是可管理的,但查询永远不会是分钟。

现在,如果你进行过滤足以从Cassandra表中仅获取100Mb,那么它意味着10Mb /机器,并且可能有几秒钟的延迟。

如何在Cassandra早期过滤数据?

  1. 使用新的SASI secondary index(等待本周发布的Cassandra 3.5,因为发现了2个严重错误)
  2. 使用DSE Search尽早过滤Solr
  3. 使用Stratio Lucene secondary index

答案 1 :(得分:1)

  

哪个更好\更快

一如既往,取决于您希望能够运行哪种查询。 Cassandra根据您设置表格的方式施加了一些限制;例如,您不能在where子句中使用非索引列。如果使用Spark inbetween加载数据,则可以执行Spark允许的任何查询。

如果您使用SparkSQL / DataFrames,并执行Cassandra does允许的查询,Spark会将其推下并获得与直接使用Cassandra类似的性能。否则,它必须从Cassandra加载所有数据,然后应用你指定的任何过滤器,这显然效率低得多。

总的来说,你可以使用Spark,但它允许用户运行非常慢的查询。因此,您仍应了解如何在Cassandra中构建数据,以增加谓词下推原始Cassandra性能的可能性。