- 在 Kmeans 的每次迭代之后,Hadoop 是否会将作为一堆集群的输出存储到 HDFS 并在下一次迭代中将它们提取到内存中?
- 制图员将观察结果放在某些集群中。我的意思是每个节点都必须知道所有的数据,而hadoop只分配计算而不是数据,这样每个节点都会给出某个节点的观察集,对吧?
谢谢
对于这样的迭代处理 Hadoop/MR,由于一次又一次地运行相同的作业直到实现集群点的收敛,因此存在开销。Hadoop 比下面提到的其他框架慢 10 倍。
使用BSP可以有效且轻松地完成像 K-Means 这样的迭代处理。Apache Hama和Apache Giraph都实现了 BSP。虽然 Apache Hama 公开了 BSP 原语,但 Apache Giraph 内部使用 BSP,主要用于图形处理,但不公开 BSP 原语。
Google 发布了一篇关于Pregel进行大规模迭代处理的论文,他们使用 BSP 作为底层模型。
Hadoop 和 MR 并不是迭代算法(例如 KMeans)的真正好选择,尽管它仍然可行。我有机会在 Hadoop 上实现马尔可夫决策过程,这给我带来了巨大的痛苦,因为每次迭代都涉及输入和输出的磁盘 IO。除此之外,在 Hadoop 集群中启动一个迭代(一个 MR 作业)需要花费数十秒的时间。
后来我试用了 Spark,这是一个类似 MR 的框架,可以在 Hadoop 上完美运行。它使用集群中所有商用计算机的内存来缓存迭代不变量,而不是反复读取和写回磁盘。您可能想检查一下:-)