我正在使用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
以下是地图的数量&减少任务运行:
没有。地图任务运行 - > 6
没有。减少任务的运行 - >的 1
但由于一台减速机,这需要花费太多时间。我想,如果我能够增加减少任务的数量,那么我将获得更好的性能。
我还尝试使用mapred-site.xml
文件增加地图缩小 mapred.map.tasks, mapred.reduce.tasks
但这没有效果,仍然以1减少运行。
答案 0 :(得分:2)
正如Abhiroop Sarkar在他的回答中提到的,使用单个减速器是硬编码的。但是,使用一个或多个减速器并不仅仅取决于您获益多少。您应该不使用多个reducer,否则算法将无法正常运行。原因是在此步骤中使用单个减速器,所有的顶篷中心将相互比较,确保它们彼此“不太接近”。
因此,您正确指定为此算法瓶颈的内容无法更改。事实上,如果你有太多的冠层中心,它也会耗尽内存。不是原始顺序算法IMHO的理想转换,因为它不能完全利用并行编程,但它是MapReduce中唯一可用的(和/或可能的)。
简而言之,使用单个减速器将树冠中心彼此远离。 使用更多缩减器会产生错误的结果。
答案 1 :(得分:1)
您没有指定您正在使用的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版,请在第{0}行查看http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.9/org/apache/mahout/clustering/canopy/CanopyDriver.java/。 354
job.setNumReduceTasks(1);
修改此内容并重新构建。但是,地图输出必须发送到一个减速器。 如果是群集,我不相信你会通过增加减速器的数量来获益。