Kmeans on hadoop


  1. 在Kmeans的每次迭代之后,Hadoop是否将一堆集群的输出存储到HDFS中,并在下一次迭代中将它们提取到内存中?
  2. 映射者将观测值放在某些集群中。我的意思是每个节点都必须知道所有数据,而Hadoop只分发计算而不是数据,以便每个节点都会给出某个节点的观察集,对吧?

谢谢

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

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

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

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

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

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

最新更新