我想听听您对使用CQL和内存查询引擎Spark / Shark的想法和经验。据我所知,CQL处理器在每个节点上的Cassandra JVM中运行。与Cassandra集群连接的Shark / Spark查询处理器在一个独立的集群中运行。此外,Datastax拥有Cassandra的DSE版本,允许部署Hadoop / Hive。问题是在哪个用例中我们会选择一个特定的解决方案而不是另一个。
答案 0 :(得分:31)
我会根据自己的经验分享一些想法。但是,如果可能,请告诉我们您的用例。它将帮助我们以更好的方式回答您的问题。
1-如果你的写作数量超过读数,Cassandra显然是一个不错的选择。话虽如此,如果您来自SQL背景并计划使用Cassandra,那么您肯定会发现CQL非常有用。但是如果你需要执行JOIN和GROUP BY等操作,即使CQL通过写入时间和紧凑时间排序来解决原始GROUP BY用例并实现一对多关系,CQL也不是答案。
2- Spark SQL(以前的Shark)非常快,原因有两个:内存处理和规划数据管道。内存处理使其比Hive快约100倍。与Hive一样,Spark SQL可以很好地处理大于内存的数据类型,并且由于计划的管道,速度提高了10倍。当存在多个数据管道(如filter和groupBy)时,情境会转移到Spark SQL优势。当您需要临时实时查询时,请继续使用它。当您需要长时间运行的作业而不是大量数据时,这种做法不适用。
3- Hive基本上是一个在现有Hadoop集群之上运行的仓库,为您提供类似SQL的界面来处理您的数据。但是Hive并不适合实时需求。它最适合离线批处理。不需要任何额外的infra,因为它使用底层HDFS进行数据存储。当您必须在大型数据集和OLAP上执行JOIN,GROUP BY等操作时,请执行此操作。
Note :
Spark SQL在Spark之上模拟Apache Hive行为,因此它几乎支持所有Hive功能,但可能更快。它支持现有的Hive Query语言,Hive数据格式(SerDes),用户定义的函数(UDF)以及调用外部脚本的查询。
但我认为只有在弄脏手之后,您才能正确评估所有这些工具的优缺点。我可以根据你的问题提出建议。
希望这可以回答您的一些疑问。
P.S。 :以上答案仅基于我的经验。欢迎提出意见/更正。
答案 1 :(得分:5)
此处记录的基准非常努力 - https://amplab.cs.berkeley.edu/benchmark/