【发布时间】:2016-08-04 11:13:40
【问题描述】:
我正在开发“大数据(空间数据)的实时渲染”的应用程序。 在 Spark Streaming + Spark SQL + WebSocket 的帮助下,我能够在仪表板上呈现预定义的查询。但我想通过交互式查询和即席查询来获取数据。
为此,我正在尝试使用“Spark Streaming + Cassandra”来实现它。这些查询需要对大量数据进行聚合和过滤。
我是 Cassandra 和 Spark 的新手,所以我对以下方法感到困惑,这会更好\更快:
- Spark 流式传输 -> 过滤 (Spark) -> 保存到 Cassandra -> 交互式查询 -> UI(仪表板)
- 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"
任何意见或建议将不胜感激。谢谢,
感谢@doanduyhai 建议 SASI 二级索引,它确实产生了巨大的影响。
【问题讨论】:
-
性能在很大程度上取决于您的表格设计以及您需要读取多少行才能回答一个请求。如果您正在优化 UI 渲染的路径,那么将数据写入 Cassandra 中的形状会以最少的读取为您提供所需的信息。如果不研究应用程序的具体要求,我认为没有通用答案。
标签: apache-spark cassandra spark-streaming spark-dataframe