我正在用mahout运行树冠聚类算法。
这是我通过mahout命令行运行的命令。
mahout canopy -i /mahout/o_seqsparse/tfidf-vectors -o /mahout/o_canopy -dm org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -ow -t1 100 -t2 50
以下是正在运行的map&reduce任务数:
运行-->6的Map任务数
运行-->1的reduce任务数
但由于一个减速机,这需要太多时间。我想,如果我能增加减少任务的数量,那么我会得到更好的表现。
我也试过用增加map reduce mapred-site.xml
文件mapred.map.tasks,mapred.reduce.tasks,但这没有效果,仍然使用1 reduce运行。
2条答案
按热度按时间fkvaft9z1#
您没有指定正在使用的mahout的版本。但看看这里的0.4源代码:http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.4/org/apache/mahout/clustering/canopy/canopydriver.java
你可以发现1减速机是硬编码的。我认为你不能推翻它。
编辑
对于指定的版本0.9,请检查此处http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.9/org/apache/mahout/clustering/canopy/canopydriver.java/ 354号线
修改此项并重新生成。但是,map输出必须发送到一个reducer。在集群的情况下,我不相信增加reducer的数量会给您带来什么好处。
u1ehiz5o2#
正如abhiroop sarkar在回答中提到的,使用一个减速机是硬编码的。然而,这不仅仅是一个问题,你有多少好处,通过使用一个或多个减速器。您不应该使用多个减速器,否则算法将无法正确运行。原因是,通过在这一步使用一个减速器,所有的树冠中心将相互比较,确保它们不会“太接近”。
因此,您正确指定的算法瓶颈是无法更改的。事实上,如果你有太多的树冠中心,它也会用尽内存。不是原始顺序算法imho的理想转换,因为它不能充分利用并行编程,但它是mapreduce中唯一可用的(和/或可能的)算法。
简言之,一个减速机是用来返回树冠中心远离对方。使用更多的减速器会产生错误的结果。