有人可以解释MapReduce如何与Cassandra一起使用.6?我已经阅读了单词计数示例,但我并不完全了解Cassandra结束与“客户端”结束时发生的事情。
https://svn.apache.org/repos/asf/cassandra/trunk/contrib/word_count/
例如,假设我使用的是Python和Pycassa,我将如何加载新的map reduce函数,然后调用它?我的map reduce函数必须是安装在cassandra服务器上的java吗?如果是这样,我如何从Pycassa调用它?
还提到Pig让这一切变得更容易,但我是一个完整的Hadoop菜鸟,所以这并没有真正的帮助。
你的答案可以使用Thrift或其他什么,我刚才提到Pycassa来表示客户端。我只是想了解Cassandra集群中运行的内容与发出请求的实际服务器之间的区别。
答案 0 :(得分:10)
从我所听到的(以及here)开发人员编写使用Cassandra作为数据源的MapReduce程序的方式如下所示。您编写了一个常规MapReduce程序(您链接到的示例是针对纯Java版本),现在可用的jar提供了一个CustomInputFormat,它允许输入源为Cassandra(而不是默认值,即Hadoop)。 / p>
如果你正在使用Pycassa我会说你运气不好(1)该项目的维护者增加了对MapReduce的支持,或者(2)你将一些Python函数放在一起编写一个Java MapReduce程序并运行它。后者肯定是一个黑客,但会让你起来。
答案 1 :(得分:2)
它了解当地; Cassandra InputFormat重写getLocations()以保留数据局部性
答案 2 :(得分:1)
使用来自cassandra的直接InputFormat的胜利在于它有效地流式传输数据,这是一个非常大的胜利。每个输入分割都包含一系列令牌,并在其全带宽下从磁盘上滚动:无需搜索,无需复杂查询。我不认为它知道局部性 - 让每个tasktracker更喜欢来自同一节点上的cassandra进程的输入拆分。
您可以尝试使用Pig和STREAM方法作为黑客,直到更直接的hadoop流支持到位。