如何使用Cassandra的地图减少或带有猪?
-
02-10-2019 - |
题
有人可以解释MapReduce如何与Cassandra .6合作吗?我已经阅读了“计数”示例,但是我不太遵循卡桑德拉(Cassandra)端与“客户”结尾的情况。
https://svn.apache.org/repos/asf/cassandra/trunk/contrib/word_count/
例如,假设我正在使用Python和Pycassa,我将如何加载新的地图降低功能,然后调用它?我的地图减少功能是否必须是安装在Cassandra服务器上的Java?如果是这样,我该如何从Pycassa称呼它?
还提到了猪使这一切变得更容易,但是我是一个完整的Hadoop Noob,所以这并没有真正的帮助。
您的答案可以使用节俭或其他任何东西,我只是提到Pycassa表示客户端。我只是试图了解Cassandra群集中运行的内容与提出请求的实际服务器之间的区别。
解决方案
从我听到的(以及 这里),开发人员编写使用Cassandra作为数据源的MapReduce程序的方式如下。您编写一个常规的MapReduce程序(链接到纯Java版本的示例)和现在可用的JARS提供了一个自定义输入Format,允许输入源为Cassandra(而不是默认为Hadoop)。
如果您正在使用pycassa,我会说您不运气,直到(1)该项目的维护者增加了对MapReduce的支持,或者(2)您将一些python函数放在一起,以编写Java MapReduce程序并运行它。后者绝对有点黑客,但会让您起床。
其他提示
它知道当地; Cassandra InputFormat替代getLocations()以保留数据局部性
使用来自Cassandra的直接输入Format的胜利是,它有效地流式传输了数据,这是一个很大的胜利。每个输入拆分都覆盖了一系列令牌,并在其完整的带宽下从磁盘上滚下来:没有寻求,没有复杂的查询。我认为它不了解局部性 - 让每个任务跟踪器都喜欢从同一节点上的Cassandra过程中的输入分配。
您可以尝试将PIG与流方法用作黑客攻击,直到建立更直接的Hadoop流支持为止。