我在运行 Mahout K-means 时遇到了一个奇怪的情况:使用预先选择的一组初始质心,我在 lucene.vector 生成的 SequenceFile 上运行 K-means。运行是为了测试目的,所以文件很小(大约 10MB~10000 个向量)。
当使用单个映射器执行 K-means 时(考虑到我的集群中的 Hadoop 拆分大小的默认值是 128MB),它会在 2 次迭代中达到给定的集群结果(案例 A)。但是,我想通过触发更多映射任务(Hadoop 集群总共有 6 个节点)来测试算法的执行速度是否会有任何改进/恶化。因此,我将 -Dmapred.max.split.size 参数设置为 5242880 字节,以使 mahout 触发 2 个映射任务(案例 B)。我确实成功地启动了两个映射器,但奇怪的是,这项工作在 5 次迭代而不是 2 次后完成,而且即使在第一次将点分配给集群时,映射器与单映射执行相比做出了不同的选择。
现有的 K-means Mahout 实现是否可以证明这种行为是合理的?