【问题标题】:How to increase number of reducer in canopy clustering algorithm如何在树冠聚类算法中增加减速器的数量
【发布时间】:2014-11-17 13:40:25
【问题描述】:

我正在使用 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

没有。减少任务的运行 --> 1

但是由于一个减速器,这花费了太多时间。我认为,如果我能够增加 reduce 任务的数量,那么我将获得更好的性能。

我还尝试使用 mapred-site.xml 文件 ma​​pred.map.tasks, ma​​pred.reduce.tasks 增加 map reduce 但这没有任何效果,它仍然以 1 个 reduce 运行。

【问题讨论】:

    标签: hadoop mapreduce mahout canopy


    【解决方案1】:

    正如 Abhiroop Sarkar 在他的回答中提到的,使用单个减速器是硬编码的。然而,这不仅仅是使用一个或多个 reducer 获得多少收益的问题。您应该不要使用多个减速器,否则算法将无法正确运行。原因是通过在这一步使用单个减速器,所有冠层中心将相互比较,确保它们不会“太接近”。

    因此,您正确指定为该算法的瓶颈的内容无法更改。事实上,如果你有太多的树冠中心,它也会耗尽内存。恕我直言,不是原始顺序算法的理想转换,因为它不能充分利用并行编程,但它是 MapReduce 中唯一可用的(和/或可能的)。

    简而言之,单个减速器用于使顶篷中心彼此远离。 使用更多的 reducer 会产生错误的结果。

    【讨论】:

    • 这不是一个糟糕的转换,它只是树冠聚类的两次迭代。在 MapReduce 中没有其他方式可以表达它。
    • 好的,我同意这一点。我自己也在尝试找出该算法的并行版本,但找不到确切的解决方案。我将编辑我的答案。
    • 谢谢你。有没有其他方法可以进行 Canapy 聚类。
    • @Vijay_Shinde 不幸的是,在 MapReduce 中没有其他方法可以做到这一点,但也有原始的顺序算法。 Weka 有一个实现:weka.sourceforge.net/doc.dev/weka/clusterers/Canopy.html
    【解决方案2】:

    您没有指定您正在使用的 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

    job.setNumReduceTasks(1);
    

    修改它并重新构建。但是地图输出必须发送到一个reducer。 在集群的情况下,我认为增加reducer的数量不会给你带来太多好处。

    【讨论】:

    • 我正在使用 mahout 0.9(即 hdp2)
    • 这是一个正确的答案,但一个错误的建议。关键是应该使用单个减速器,以便比较所有的树冠中心。我敢说糟糕的算法,但这是运行它的方式。
    • 正是我指定“但是在集群的情况下,我不相信你会通过增加减速器的数量而受益匪浅。”我想我应该把它加粗!
    • +1 进行解释。 “修改这个并重新构建。”但是,应该删除恕我直言,因为它会给出错误的结果,正如您在粗体句子中所建议的那样。并不是说它不会有太多好处,而是它会给出错误的结果。
    • 谢谢 Abhiroop,正如你所说,如果我增加减速器的数量,那么它会给出错误的结果。目前我在 3 个 lac 文档上运行树冠集群,在这种情况下性能很差。我该怎么办。
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 2022-01-10
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多