Mahout 0.9 K-Means mapReduce 算法分析
Posted
技术标签:
【中文标题】Mahout 0.9 K-Means mapReduce 算法分析【英文标题】:Mahout 0.9 K-Means mapReduce analysis of the algorithm 【发布时间】:2014-04-20 17:03:20 【问题描述】:我一直在使用 MapReduce 检查 Mahout 0.9 k-means 的算法,我想知道在哪里可以检查 map 函数和 reducer 中发生的事情的代码?
我正在使用 NetBeans 进行调试,但无法找到 Map 和 Reduce 函数中究竟实现了什么...
我这样做的原因是因为我想知道在 Mahout 0.9 版本中究竟实现了什么,以便查看哪些部分在 K-Means mapReduce 算法上进行了优化。
如果有人知道 Mahout K 均值基于哪篇研究论文,那也会对我有很大帮助。
非常感谢!
最好的问候!
【问题讨论】:
【参考方案1】:下载 mahout-core 的源代码。搜索 java 文件org.apache.mahout.clustering.kmeans.KMeansDriver
。
在这个java文件中搜索ClusterIterator.iterateMR(conf, input, priorClustersPath, output, maxIterations);
行
class org.apache.mahout.clustering.iterator.ClusterIterator
中的iterateMR
函数是定义 Map Reduce 所需的所有配置的类。
org.apache.mahout.clustering.iterator.CIMapper
和 org.apache.mahout.clustering.iterator.CIReducer
是您正在寻找的 Map reduce 类。
希望这会有所帮助!! :)
但是,我不知道实施的是哪篇研究论文。
【讨论】:
它帮助了我,我正在检查那些课程,谢谢你 rkmalaiya【参考方案2】:K-means(更准确地说,Lloyds 算法)是简单并行的。我怀疑是否有论文讨论 Mahout 使用的实现,因为这是显而易见的方法。绝对没有任何技巧: Lloyds 算法主要由 sum 组成,并且 sum 很容易并行化。
不幸的是(就像 Hadoop 一样),Mahout 是 10 层厚的抽象。这不会产生最佳性能,但特别是使得挖掘所有代码和元代码到实际实现也非常困难。有关分散在十几个类中的源代码片段的指针,请参见此处的其他答案。
在使用 Mahout 时,请确保在您的实验中还包括 k-means 的非 Hadoop 实现。您会惊讶于它们 A) 优于 Mahout 的频率以及 B) 提供更好结果的频率。
【讨论】:
好像没有研究论文讨论实现,我去看看CIMapper和CIReducer类。你知道哪些框架优于 mahout 并行 K-means 或其他流行的框架吗?谢谢 Anony-Mousse 在具有足够内存的单个主机上尝试 ELKI 或 scipy。对于 ELKI,请阅读 Java 文档如何增加 Java 内存限额。除非您的数据真的非常大,否则这些工具将轻松胜过 Mahout。以上是关于Mahout 0.9 K-Means mapReduce 算法分析的主要内容,如果未能解决你的问题,请参考以下文章