卡桑德拉+;Solr/Hadoop/Spark-选择正确的工具

卡桑德拉+;Solr/Hadoop/Spark-选择正确的工具,hadoop,solr,cassandra,analytics,apache-spark,Hadoop,Solr,Cassandra,Analytics,Apache Spark,我目前正在研究如何存储和分析每行多达1000列的丰富的基于时间的数据。目前,Cassandra和Datastax Enterprise提供的Solr、Hadoop或Spark似乎满足了我的粗略需求。但问题在于细节 在1000列中,大约60列用于实时查询(web前端、用户发送表单和期望快速响应)。这些查询或多或少都是GROUPBY语句,其中统计了数量或出现次数 由于Cassandra本身没有提供所需的分析能力(没有GROUPBY),我只能选择以下几种方法: 通过Cassandra粗略查询并在自编

我目前正在研究如何存储和分析每行多达1000列的丰富的基于时间的数据。目前,Cassandra和Datastax Enterprise提供的Solr、Hadoop或Spark似乎满足了我的粗略需求。但问题在于细节

在1000列中,大约60列用于实时查询(web前端、用户发送表单和期望快速响应)。这些查询或多或少都是GROUPBY语句,其中统计了数量或出现次数

由于Cassandra本身没有提供所需的分析能力(没有GROUPBY),我只能选择以下几种方法:

  • 通过Cassandra粗略查询并在自编代码中过滤结果集
  • 使用Solr索引数据并运行facet.pivot查询
  • 使用Hadoop或Spark并运行查询
第一种方法看起来很麻烦,而且容易出错……Solr确实有一些分析功能,但没有多字段分组,我只能使用枢轴。我不知道这是一种好的还是性能好的方法……最后但并非最不重要的是Hadoop和Spark,之前的方法并不适合实时查询,后来的方法非常新,可能还没有准备好生产

那么该走哪条路呢?这里没有一个适合所有人的方法,但是在我通过一种方法之前,我想得到一些反馈。也许我在想复杂的事情,或者我的期望太高:S

提前感谢,


阿曼

我推荐Spark,如果你在网上抢夺,你会得到像亚马逊、eBay和雅虎这样的名字。此外,正如您在评论中所指出的,它正在成为一个成熟的工具

您已经给出了反对Cassandra和Solr的论点,所以我将重点解释为什么Hadoop MapReduce在实时查询方面不如Spark

Hadoop和MapReduce被设计成利用硬盘,假设大数据IO可以忽略不计。结果,数据至少被读写两次——在map阶段和reduce阶段。这允许您从故障中恢复,因为部分结果是安全的,但这并不是您在进行实时查询时想要的

Spark不仅旨在修复MapReduce的缺点,还注重交互式数据分析,这正是您所需要的。这一目标主要是通过利用RAM来实现的,其结果是惊人的。Spark作业通常比MapReduce等同物快10-100倍


唯一需要注意的是你拥有的内存量。最有可能您的数据可能会在RAM中出现异常您可以提供,也可以依靠采样。通常,当以交互方式处理数据时,实际上不需要使用MapReduce,在您的情况下似乎也是如此。

在我现在工作的地方,我们有一套类似的技术要求,解决方案就是Cassandra Solr Spark,正是按照这个顺序

所以,如果一个查询可以被Cassandra索引“覆盖”——好的,如果不是——它就被Solr覆盖了。对于测试&不太常见的查询-Spark(Scala,由于它的旧版本而没有SparkSQL-它是一个银行,所有东西都应该经过测试和成熟,从cognac到软件,argh)


一般来说,我同意这个解决方案,尽管有时我觉得有些客户的请求根本不应该被认真对待,这样我们就不会有太多奇怪的疑问:)

嗨,我只是想知道你最后是否使用了什么特殊策略,好吗?谢谢。不幸的是,没有。部分是因为项目中途改变了。。。自从我在这里发帖以来,Solr和Spark收到了很多更新。Solr方法工作良好,当索引是完整的,这是很难。。。另一方面,Spark应该比Hadoop做得更好,但我没有时间检查它。