提问者:小点点

Parquetvs Cassandra使用火花和数据帧


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

  • 使用Cassandra并使用索引来加速GoupBy操作。
  • 根据数据布局使用Parquet和分区。

我可以说Parquet分区的工作速度更快,可扩展性更强,内存开销更小。所以问题是这样的:

如果开发人员推断并理解数据布局和它将被使用的方式,那么仅仅使用Parquet不是更好吗?因为你将对它有更多的控制权?为什么我要为Cassandra造成的开销付出代价?


共2个答案

匿名用户

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

好吧,关于你的用例:Parquet对你来说是更好的选择。这就是为什么:

  • 您在非常大且未拆分的数据集上聚合原始数据
  • 您的SparkML工作听起来像是一个预定的,而不是长期运行的工作。

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

>

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

    如果实时不重要,请使用Parquet

  • 匿名用户

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

    此外,如果您必须处理更新,Cassandra会更容易,这不仅是要在数据管道中摄取的新数据(例如日志),而且您还必须关心更新(例如系统必须处理数据的更正)

    当你的用途是使用Spark进行分析时(你不关心上面提到的主题),使用Parquet/HDFS应该是可行的,而且便宜得多——正如你所说的。有了HDFS,你还可以用Spark实现数据局部性,如果你正在读取大块数据,你的分析Spark应用程序可能会更快。