我一直在使用MapReduce检查Mahout 0.9 k-means的算法,我想知道在哪里可以检查map函数和reducer中发生的代码?
我正在使用NetBeans进行调试,但我无法找到Map和Reduce函数中的确切实现...
我这样做的原因是因为我想知道在Mahout 0.9版本中究竟实现了什么,以便查看哪些部分在K-Means mapReduce算法上进行了优化。
如果有人知道Mahout K-means所依据的研究论文,那对我也有很大帮助。
非常感谢你!
祝你好运!
答案 0 :(得分:1)
下载mahout-core的源代码。搜索java文件org.apache.mahout.clustering.kmeans.KMeansDriver
。
在此java文件中搜索行ClusterIterator.iterateMR(conf, input, priorClustersPath, output, maxIterations);
iterateMR
中的 class org.apache.mahout.clustering.iterator.ClusterIterator
函数是定义Map Reduce所需的所有配置的类。
org.apache.mahout.clustering.iterator.CIMapper
和org.apache.mahout.clustering.iterator.CIReducer
是您要查找的地图缩减类。
希望这有帮助!! :)
但是,我不知道哪个研究论文得到了实施。
答案 1 :(得分:0)
K-means(更确切地说,Lloyds算法)是天真平行的。我怀疑是否有一篇论文讨论Mahout使用的实现,因为这是明显的方法。绝对没有涉及的伎俩: Lloyds算法主要由 sum 组成,并且总和很容易并行化。
不幸的是(就像Hadoop的大部分内容一样),Mahout是10层厚的抽象。哪个没有产生最佳性能,但特别是使得将所有代码和元代码深入到实际实现中也变得非常困难。请参阅另一篇文章,了解分散在十几个类中的源代码片段。
在玩Mahout时,请务必在实验中包含非Hadoop k-means实现。你会惊讶于他们经常表现出A)超越Mahout,并且B)提供更好的结果。