14

我们有大量来自存储在 Cassandra 中的各种网站的用户交互数据,例如 cookie、页面访问、广告查看、广告点击等,我们希望对其进行报告。我们当前的 Cassandra 架构支持基本的报告和查询。但是,我们也希望构建大型查询,这些查询通常涉及大型列族(包含数百万行)上的联接。

什么方法最适合这个?一种可能性是将数据提取到关系数据库(如 mySQL)并在那里进行数据挖掘。替代方法可能是尝试使用带有 hive 或 pig 的 hadoop 来为此目的运行 map reduce 查询?我必须承认我对后者的经验为零。

任何人都经历过一种与另一种的性能差异?您是否会在实时 Cassandra 生产实例或备份副本上运行 map reduce 查询以防止查询负载影响写入性能?

4

2 回答 2

13

根据我的经验,Cassandra 更适合需要实时访问数据、快速随机读取以及通常只处理大流量负载的流程。但是,如果您开始进行复杂的分析,您的 Cassandra 集群的可用性可能会受到显着影响。一般来说,从我所看到的情况来看,让 Cassandra 集群保持独立符合您的最大利益,否则可用性开始受到影响。

听起来您需要一个分析平台,我肯定会建议将您的报告数据从 Cassandra 导出,以便在离线数据仓库系统中使用。

如果您负担得起,拥有一个真正的数据仓库将允许您在多个表上使用复杂的连接执行复杂的查询。这些数据仓库系统被广泛用于报告,以下是我认为主要参与者的列表:

  • 内特扎
  • 紫苑/TeraData
  • 垂直

最近获得很大动力的是Amazon Redshift,但它目前处于测试阶段,但如果你能得到它,你可以尝试一下,因为它看起来像一个可靠的分析平台,价格更具吸引力比上述解决方案。

使用 Hadoop MapReduce/Hive/Pig 等替代方案也很有趣,但可能无法替代 Hadoop 技术。如果你有 SQL 背景,我会推荐 Hive,因为它很容易理解你在做什么,而且你可以轻松扩展。实际上已经有与 Hadoop 集成的库,例如Apache Mahout,它允许您在 Hadoop 集群上进行数据挖掘,您绝对应该尝试一下,看看它是否符合您的需求。

为了给你一个想法,我使用的一种到目前为止运行良好的方法是在 Hive 中预先聚合结果,然后在 Netezza 等数据仓库中生成报告本身来计算复杂的连接。

于 2013-01-26T01:07:28.710 回答
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 集群中。

于 2013-01-28T05:09:28.720 回答