我们有很多来自Cassandra存储的各种网站的用户互动数据,例如Cookie,网页访问,广告浏览,点击广告等等。我们希望进行报道。我们当前的Cassandra架构支持基本报告和查询。但是,我们还希望构建大型查询,这些查询通常涉及大型列系列上的连接(包含数百万行)。
哪种方法最适合这种方法?一种可能性是将数据提取到关系数据库(如mySQL)并在那里进行数据挖掘。替代可能是尝试使用hadoop与蜂巢或猪为此目的运行map reduce查询?我必须承认我对后者没有经验。
任何人都有一方与另一方的绩效差异经验?您是否会在实时Cassandra生产实例或备份副本上运行map reduce查询以防止查询负载影响写入性能?
答案 0 :(得分:13)
根据我的经验,Cassandra更适合需要实时访问数据,快速随机读取以及通常处理大量流量负载的流程。但是,如果您开始进行复杂的分析,Cassandra集群的可用性可能会受到明显影响。总的来说,从我所看到的,单独离开Cassandra集群符合你的最佳利益,否则可用性开始受到影响。
听起来您需要一个分析平台,我肯定会建议您将报告数据从Cassandra中导出,以便在离线数据仓库系统中使用。
如果你能负担得起,拥有一个真正的数据仓库将允许你在多个表上进行复杂连接的复杂查询。这些数据仓库系统广泛用于报告,这里列出了我认为关键参与者的内容:
最近获得大量动力的是Amazon Redshift,但它目前处于测试阶段,但是如果你能掌握它,你可以尝试一下,因为它看起来像一个可靠的分析平台定价比上述解决方案更具吸引力。
使用Hadoop MapReduce / Hive / Pig等替代方案也很有趣,但可能不是Hadoop技术的替代品。如果您有SQL背景,我会推荐Hive,因为它很容易理解您正在做什么,并且您可以轻松扩展。实际上已经有了与Hadoop集成的库,比如Apache Mahout,它允许您在Hadoop集群上进行数据挖掘,您一定要尝试一下,看看它是否符合您的需求。
为了给你一个想法,我使用过的目前运行良好的方法是在Hive中预先聚合结果,然后在像Netezza这样的数据仓库中生成报告,以计算复杂的连接。
答案 1 :(得分:8)
披露:我是DataStax的工程师。
除了Charles的建议之外,您可能还需要研究DataStax Enterprise(DSE),它提供了Cassandra与Hadoop,Hive,Pig和Mahout的良好集成。
正如Charles所提到的,您不希望直接针对处理实时应用程序需求的Cassandra节点运行分析,因为它们会对性能产生重大影响。为了避免这种情况,DSE允许您通过使用多个虚拟“数据中心”(在术语的NetworkToplogyStrategy意义上)将集群的一部分严格用于分析。作为Hadoop作业的一部分执行的查询只会影响这些节点,从而使您的普通Cassandra节点不受影响。此外,您可以根据性能需求单独向上或向下扩展群集的每个部分。
DSE方法有一些好处。首先,您在处理数据之前不需要执行任何ETL; Cassandra的正常复制机制使用于分析的节点保持最新。其次,您不需要外部Hadoop集群。 DSE包含一个名为CFS(CassandraFS)的HDFS替代品,因此Hadoop作业的所有源数据,中间结果和最终结果都可以存储在Cassandra集群中。