我想在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。
答案 0 :(得分:0)
是的,您需要一个小的预处理步骤。
由于生成的MAT文件是二进制文件,将其转换为文本文件(.txt),每行开始一个包含38个特征值的向量,这将是第一步。
然后,使用SeqDirectory(或编写自己的SequenceFileWriter来完成它)将是下一步,所有其他步骤都遵循路透社的例子。
您自己的序列文件编写器的示例为How to convert .txt file to Hadoop's sequence file format
我为Mahout LDA尝试了相同的操作,我编写了自己的序列文件编写器,并将其作为LDA过程下一步的输入,即seq2sparse。
答案 1 :(得分:0)
如果您的数据 太大而无法在单台计算机上进行分析,那么Mahout只会得到回报,但您确实需要至少十几台计算机来保存并处理数据。
原因是架构。 Mahout构建在map-reduce之上,依赖于将大量iterim数据写入磁盘,以便能够从崩溃中恢复。
在伪分布式模式下,无论如何都无法从这种崩溃中恢复过来。
如果您想学习安装和配置Mahout,而无法访问真正的群集,则可以使用伪分布式模式。用于分析实际数据不是合理的。
相反,使用Matlab内置的功能,或使用为单个节点设计的群集工具,例如ELKI。它通常会超过Mahout一个数量级的不将所有内容写入磁盘多次。在我的实验中,这些工具能够在单个核心上超过10核Mahout群集10倍。因为I / O成本完全支配运行时。
如果你不相信我,请自己做基准。将路透社数据加载到Matlab中,并将其集中在那里。我很确定,Matlab会让Mahout看起来像一个古老的时尚。