Parquet 与 Cassandra 使用 Spark 和 DataFrames

Parquet vs Cassandra using Spark and DataFrames

我陷入了这样的困境,我无法选择哪种解决方案对我来说更好。我有一个非常大的 table(几个 100GB)和几个较小的(几个 GB)。为了在 Spark 中创建我的数据管道并使用 spark ML,我需要加入这些 tables 并执行几个 GroupBy(聚合)操作。这些操作对我来说真的很慢,所以我选择执行以下两个操作之一:

我可以说 Parquet 分区比 Cassandra 使用的内存开销更少,运行速度更快,可扩展性更强。所以问题是:

如果开发人员推断并理解数据布局及其使用方式,那么只使用 Parquet 岂不是更好,因为您可以更好地控制它?我为什么要为 Cassandra 造成的开销付出代价?

这取决于您的用例。 Cassandra 使使用(有限的)伪 SQL 访问数据变得更加容易(也在 Spark 之外)。这使得它非常适合在其之上构建在线应用程序(例如,在 UI 中显示数据)。

此外,如果您必须处理更新,Cassandra 会变得更容易,这不仅是新数据将被引入您的数据管道(例如日志),而且您还必须注意更新(例如系统有处理数据更正)

当您的用例是使用 Spark 进行分析时(并且您不关心上述主题),使用 Parquet/HDFS 应该是可行的并且成本相当低 - 正如您所说的。使用 HDFS,您还可以通过 Spark 实现数据本地化,并且如果您正在读取大块数据,您的分析 Spark 应用程序可能会更快。

Cassandra 也是分析用例的一个很好的解决方案,但以另一种方式。在为键空间建模之前,您必须知道需要如何读取数据。您还可以使用 where 和 range 查询,但以严格限制的方式。有时你会讨厌这种限制,但这些限制是有原因的。 Cassandra 不像 Mysql。在 MySQL 中,性能不是关键特性。它更多的是关于灵活性和一致性。 Cassandra 是一个高性能 write/read 数据库。写的比读的好。 Cassandra 还具有线性可扩展性。

好的,关于您的用例:Parquet 是您更好的选择。这就是为什么:

  • 您在非常大且未拆分的数据集上聚合原始数据
  • 您的 Spark ML 作业听起来像是一个预定的,而不是长期 运行ning 作业。 (一周一次,一天一次?)

这更适合 Parquet 的用例。 Parquet 是一种用于临时分析、过滤分析的解决方案。如果您需要每月 运行 查询 1 或 2 次,Parquet 真的很棒。如果营销人员想知道一件事并且响应时间不是那么重要,Parquet 也是一个不错的解决方案。简单而简短:

  • 如果您知道查询,请使用 Cassandra。
  • 如果查询将在日常业务中使用,请使用 Cassandra
  • 如果实时很重要,请使用 Cassandra(我说的是最多 30 秒的延迟,从客户执行操作开始,我可以在我的仪表板中看到结果)

  • 如果实时无关紧要,请使用 Parquet

  • 如果查询不会每天执行 100 次,请使用 Parquet。
  • 如果要进行批处理,请使用 Parquet