【问题标题】:Kmeans on hadoopHadoop 上的 Kmeans
【发布时间】:2012-09-18 05:49:43
【问题描述】:
  1. 每次 Kmeans 迭代后,Hadoop 是否会将输出(即一堆集群)存储到 HDFS 并在下一次迭代中将它们提取到内存中?
  2. 制图员将观察结果放在特定的集群中。我的意思是每个节点都必须知道所有的数据,而hadoop只分配计算而不是分配数据,这样每个节点都会给出某个节点的观察集,对吧?

谢谢

【问题讨论】:

    标签: hadoop reduce k-means mapper


    【解决方案1】:

    对于这样的迭代处理 Hadoop/MR,因为一次又一次地运行相同的作业直到实现集群点的收敛,会产生开销。 Hadoop 比下面提到的其他框架慢 10 倍。

    使用BSP 可以高效轻松地完成 K-Means 等迭代处理。 Apache HamaApache Giraph 都实现了 BSP。虽然 Apache Hama 公开了 BSP 原语,但 Apache Giraph 内部使用 BSP,主要用于图形处理,但不公开 BSP 原语。

    Google 发布了一篇关于 Pregel 的论文,用于大规模迭代处理,他们使用 BSP 作为底层模型。

    【讨论】:

      【解决方案2】:
      1. 是的,如果我们要将数据从一个 MR 作业传递到另一个 - HDFS(或准确地说是 DFS)是唯一的选择。这不是问题,因为我们在这里聚合了集群的带宽
      2. K-Mean 聚类不需要将所有数据发送到所有节点 - 它具有此处描述的非常有效的并行实现。 http://blog.data-miners.com/2008/02/mapreduce-and-k-means-clustering.html 简而言之,就是聚合从本地可用组到所有中心的距离,然后发送少量信息进行集中处理。

      【讨论】:

      • 非常感谢,您提供的参考资料很有帮助。
      【解决方案3】:

      Hadoop 和 MR 并不是迭代算法(例如 KMeans)的真正好选择,尽管它仍然可行。我有机会在 Hadoop 上实现马尔可夫决策过程,这给我带来了巨大的痛苦,因为每次迭代都涉及输入和输出的磁盘 IO。除此之外,在 Hadoop 集群中启动一个迭代(一个 MR 作业)需要花费数十秒的时间。

      后来我试用了 Spark,这是一个类似 MR 的框架,可以在 Hadoop 上完美运行。它使用集群中所有商用计算机的内存来缓存迭代不变量,而不是反复读取和写回磁盘。你可能想看看:-)

      【讨论】:

        猜你喜欢
        • 2012-06-06
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 2016-12-15
        • 2019-03-14
        相关资源
        最近更新 更多