Cassandra + Spark用于实时分析

Aje*_*eet 5 cassandra apache-spark spark-streaming spark-dataframe

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

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

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

  1. Spark Streaming->过滤(Spark)->保存到Cassandra->交互式查询-> UI(仪表板)
  2. Spark流->过滤(Spark)->保存到Cassandra-> Spark SQL->交互式查询-> UI(仪表板)

卡桑德拉(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"
Run Code Online (Sandbox Code Playgroud)

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

感谢@doanduyhai建议使用SASI二级索引,它确实产生了很大的变化。

doa*_*hai 2

Cassandra 的速度足以实时给出结果吗?或者我应该从 Cassandra 创建一个 RDD 来对其执行交互式查询。

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

现在,如果您进行足够的过滤,仅从 Cassandra 表中获取总共 100Mb 的数据,则意味着每台机器 10Mb,并且可能会有秒级的延迟。

如何在 Cassandra 中尽早过滤数据?

  1. 使用新的SASI二级索引(等待本周发布的Cassandra 3.5,因为已经发现了2个严重bug)
  2. 使用DSE 搜索通过 Solr 进行早期过滤
  3. 使用Stratio Lucene 二级索引