【问题标题】:Apache Cassandra and SparkApache Cassandra 和 Spark
【发布时间】:2016-09-15 09:06:54
【问题描述】:
我是一位经验丰富的 RDBMD 开发人员和管理员。但我是 Apache Cassandra 和 Spark 的新手。我学习了 Cassandra 的 CQL,文档说 CQL 不支持连接和子查询,因为它在 Cassandra 中效率太低,因为它具有分布式数据性质。
因此,我得出结论,在分布式数据环境中,不支持连接和子查询,因为它们会严重影响性能。
但后来我学习了 Spark,它也适用于分布式数据,但 Spark 支持所有 SQL 功能,包括连接和子查询。尽管 Spark 不是数据库系统,因此甚至没有索引......所以,我的问题是 Spark 是如何支持分布式数据的连接和子查询的?它是否有效地做到了?
提前致谢。
【问题讨论】:
标签:
sql
apache-spark
cassandra
【解决方案1】:
Apache spark 有一个 RDD(Resilient Distributed DataSet) 的概念,它是在内存中创建的。
它基本上是 spark 中的基本 data structure。
Joins, queries 在此 RDD 上执行,并且由于它在 memory 中运行,这就是它非常高效的原因。
请通过以下文档了解有关弹性数据集的一些想法
http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds
【解决方案2】:
Spark 完成了对分布式数据进行联接所需的“艰苦工作”。在实际执行连接之前,它会执行大型洗牌以对齐键上的数据。这基本上意味着任何连接都需要非常大量的数据移动,除非原始数据源是根据用于连接的键进行分区的。
C* 不允许像这样的通用连接,因为涉及成本,它面向 OLTP 工作负载,并且需要完整的数据混洗本质上是 OLAP。