我们有大量的用户交互数据,从各种网站存储在Cassandra,如饼干,网页访问,广告浏览,广告点击等。。我们想做报告。我们当前的cassandra模式支持基本的报告和查询。但是,我们还希望构建大型查询,这些查询通常涉及大型列族(包含数百万行)上的联接。
什么方法最适合这种情况?一种可能性是将数据提取到关系数据库(如mysql)并在那里进行数据挖掘。另一种方法是尝试使用hadoop和hive或pig来运行map reduce查询?我必须承认我对后者毫无经验。
有人经历过其中一个和另一个的性能差异吗?您会在活动cassandra生产示例或备份副本上运行map reduce查询,以防止查询负载影响写性能吗?
2条答案
按热度按时间70gysomp1#
披露:我是税务局的工程师。
除了charles的建议之外,您可能还需要研究datastax enterprise(dse),它提供了cassandra与hadoop、hive、pig和mahout的良好集成。
正如charles提到的,您不希望直接针对处理实时应用程序需求的cassandra节点运行分析,因为它们会对性能产生重大影响。为了避免这种情况,dse允许您使用多个虚拟“数据中心”(术语的networktoplogystrategy)将集群的一部分严格用于分析。作为hadoop作业的一部分执行的查询只会影响那些节点,基本上不会影响正常的cassandra节点。此外,还可以根据性能需要分别向上或向下扩展集群的每个部分。
dse方法有几个优点。首先,在处理数据之前不需要执行任何etl;cassandra的正常复制机制使用于分析的节点保持最新。其次,您不需要外部hadoop集群。dse包含一个drop-in替换hdfs,称为cfs(cassandrafs),因此hadoop作业的所有源数据、中间结果和最终结果都可以存储在cassandra集群中。
t0ybt7op2#
根据我的经验,cassandra更适合于那些需要实时访问数据、快速随机读取和处理大量流量负载的进程。但是,如果您开始进行复杂的分析,您的cassandra集群的可用性可能会受到明显的影响。总的来说,从我所看到的情况来看,让cassandra集群单独运行对您最有利,否则可用性开始受到影响。
听起来你需要一个分析平台,我绝对建议你把你的报告数据从cassandra导出,用于离线数据仓库系统。
如果您负担得起,拥有一个真正的数据仓库将允许您在多个表上使用复杂的联接进行复杂的查询。这些数据仓库系统广泛用于报告,以下是我认为主要参与者的列表:
内特扎
aster/teradata公司
眩晕
最近一个正在取得很大的势头是亚马逊红移,但它目前是测试版,但如果你能得到你的手上,你可以尝试一下,因为它看起来像一个坚实的分析平台,定价比上述解决方案更具吸引力。
使用hadoopmapreduce/hive/pig等替代方法也很有趣,但可能不是hadoop技术的替代品。如果你有sql背景的话,我建议你使用hive,因为它很容易理解你在做什么,而且你可以很容易地扩展。实际上已经有一些库与hadoop集成,比如apachemahout,它允许您在hadoop集群上进行数据挖掘,您应该尝试一下,看看它是否适合您的需要。
给你一个想法,我使用的一种方法到目前为止一直很有效,就是在hive中预先聚合结果,然后在netezza这样的数据仓库中生成报告,以计算复杂的连接。