【问题标题】:Mahout k-means on HadoopHadoop 上的 Mahout k-means
【发布时间】:2014-07-13 20:49:32
【问题描述】:
我想在 Hadoop 伪分布式模式下运行 kmeans 集群。我在 .mat 文件中有 500 万个向量,每个向量有 38 个数字特征,如下所示:
0 0 1 0 0 0 0 0 0 0 0 0 ...
我已经运行了我找到的示例,例如路透社 (mhttps://mahout.apache.org/users/clustering/k-means-clustering.html) 或合成数据。我知道我必须将此向量转换为 SequenceFile,但我不知道我之前是否需要做更多的事情。
我正在使用 Mahout 0.7 和 Hadoop 1.2.1。
【问题讨论】:
标签:
hadoop
cluster-computing
cluster-analysis
mahout
【解决方案1】:
永远不要使用伪分布式模式
Mahout 仅在您的数据方式太大而无法在单台计算机上进行分析,但您确实需要至少一打台计算机来保存的情况下才能获得回报并处理数据。
原因在于架构。 Mahout 建立在 map-reduce 之上,并依赖于将大量 iterim 数据写入磁盘,以便能够从崩溃中恢复。
在伪分布式模式下,无论如何它都无法从此类崩溃中很好地恢复。
如果您想学习安装和配置 Mahout,而无需访问真实集群,则可以使用伪分布式模式。用于分析真实数据是不合理的。
改为使用 Matlab 中内置的功能,或使用为单个节点设计的集群工具,例如 ELKI。通过不将所有内容多次写入磁盘,它的性能通常会比 Mahout 高一个数量级。在我的实验中,这些工具在 单 核心上的性能比 10 核心 Mahout 集群高出 10 倍。因为 I/O 成本完全支配运行时。
对自己进行基准测试
如果您在这方面不信任我,请对自己进行基准测试。将路透社数据加载到 Matlab 中,并在那里进行聚类。我很确定,Matlab 会让 Mahout 看起来像一个旧时尚。
【解决方案2】:
是的,您需要一个小的预处理步骤。
由于生成的 MAT 文件是二进制文件,因此第一步将其转换为 文本文件 (.txt),每行开始一个具有 38 个特征值的向量。
然后,使用 SeqDirectory(或编写您自己的 SequenceFileWriter 来完成它)将是下一步,所有其他步骤都按照路透社示例中的方式进行。
您自己的序列文件编写器的示例是How to convert .txt file to Hadoop's sequence file format
我对 Mahout LDA 进行了同样的尝试,我编写了自己的序列文件编写器,并将其作为 LDA 过程的下一步(即 seq2sparse)的输入。