【问题标题】:Cassandra + Spark for Real time analyticsCassandra + Spark 用于实时分析
【发布时间】:2016-08-04 11:13:40
【问题描述】:

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

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

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

  1. Spark 流式传输 -> 过滤 (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"

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

感谢@doanduyhai 建议 SASI 二级索引,它确实产生了巨大的影响。

【问题讨论】:

  • 性能在很大程度上取决于您的表格设计以及您需要读取多少行才能回答一个请求。如果您正在优化 UI 渲染的路径,那么将数据写入 Cassandra 中的形状会以最少的读取为您提供所需的信息。如果不研究应用程序的具体要求,我认为没有通用答案。

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


【解决方案1】:

哪个会更好\更快

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

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

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

【讨论】:

  • 谢谢@sgvd,这会很有帮助。
【解决方案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

【讨论】:

  • 感谢@doanduyhai 的快速回复。我的问题是关于 Cassandra vs Spark。在这两种情况下,集群配置都是相同的。所以我不确定我应该将数据从 Cassandra 加载回 Spark 以进行聚合\查询,还是 Cassandra 就足够了?
  • 单独使用 Cassandra 或 Cassandra+Spark 差别不大如果您不及早过滤。使用 Spark 过滤内存中的数据并不快,因为无论如何您都需要全面扫描 Cassandra 才能输出
  • 我正在等待 Spark 2.0 ... :) “结构化流”随附,如果我理解正确,则此用例不需要 Cassandra。它将提供直接在流上执行交互式查询的能力。 datanami.com/2016/02/25/…
  • 是的,我在将数据存储到 Cassandra 之前(尽可能地)过滤数据。
  • 谢谢@doanduyhai
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2019-10-06
  • 2016-04-09
  • 2020-05-23
  • 2016-03-08
  • 2021-11-21
  • 2017-01-13
相关资源
最近更新 更多