2010-04-29 20 views
14

有人可以解释一下MapReduce如何与Cassandra.6搭配使用吗?我已经读过了字数统计的例子,但我并不完全了解Cassandra的结局与“客户端”的结局。如何使用Cassandra的Map Reduce或不带猪?

https://svn.apache.org/repos/asf/cassandra/trunk/contrib/word_count/

举例来说,假设我使用Python和Pycassa,我将如何加载新的地图功能降低,然后再打电话吗?我的地图缩小功能是否必须是安装在cassandra服务器上的java?如果是这样,我如何从Pycassa调用它?

还有一提到猪使这一切都更容易,但我是一个完整的Hadoop noob,所以这并没有真正的帮助。

你的答案可以使用Thrift或其他,我刚才提到Pycassa来表示客户端。我只是想了解在Cassandra集群中运行的内容与发出请求的实际服务器之间的区别。

回答

10

从我听说的(和从here),开发人员编写一个使用Cassandra作为数据源的MapReduce程序的方式如下。你编写一个常规的MapReduce程序(你链接的例子是纯Java版本),现在可用的jar提供了一个CustomInputFormat,它允许输入源为Cassandra(而不是默认的,即Hadoop)。

如果你使用Pycassa,我会说你运气不好,直到(1)该项目的维护者增加了对MapReduce的支持,或者(2)你将一些Python函数一起抛出,写出一个Java MapReduce编程并运行它。后者绝对是一个黑客,但会让你起身走。

+1

因此,Cassandra节点不会执行map reduce操作,无论您的Java运行在哪里? – UltimateBrent 2010-04-29 22:02:25

+0

是的,Hadoop jobtrackers运行m/r作业。 – jbellis 2010-04-30 01:35:23

+1

所以不是地图减少它的分布点?如果它不在cassandra节点上运行,那有什么意义? – UltimateBrent 2010-04-30 20:28:14

1

使用来自cassandra的直接InputFormat的胜利是它可以高效地传输数据,这是一个非常大的胜利。每个输入分割都包含一系列令牌,并以全带宽滚动磁盘:不需要查找,也不需要复杂的查询。我不认为它知道局部性 - 让每个任务跟踪器都喜欢来自同一节点上的cassandra进程的输入拆分。

您可以尝试使用Pig与STREAM方法作为黑客,直到更直接的hadoop流支持到位。

1

它知道当地; Cassandra InputFormat覆盖getLocations()以保留数据局部性