我想在hadoop伪分布式模式下运行kmeans集群。我在一个.mat文件中有500万个向量,每个向量有38个数字特征,比如:0 0 1 0 0 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。
2条答案
按热度按时间hsgswve41#
是的,你需要一个小的预处理步骤。
由于生成的mat文件是一个二进制文件,因此第一步是将其转换为文本文件(.txt),每行开始一个具有38个特征值的向量。
然后,使用seqdirectory(或者编写自己的sequencefilewriter来完成它)将是下一步,所有其他步骤如路透社示例所示。
您自己的序列文件编写器的示例是如何将.txt文件转换为hadoop的序列文件格式
我对mahout lda也做了同样的尝试,在那里我编写了自己的序列文件编写器,并将其作为lda过程的下一步seq2sparse的输入。
tuwxkamq2#
切勿使用伪分布式模式
只有当你的数据太大而无法在一台计算机上分析时,mahout才有回报,但你确实需要至少十几台计算机来保存和处理数据。
原因是建筑。mahout构建在map reduce之上,它依赖于将大量iterim数据写入磁盘,以便能够从崩溃中恢复。
在伪分布式模式下,它无论如何也无法很好地从此类崩溃中恢复。
如果您想学习安装和配置mahout,而不需要访问真正的集群,那么伪分布式模式是可以的。用它来分析实际数据是不合理的。
相反,可以使用matlab内置的功能,或者使用为单个节点(如elki)设计的集群工具。它通常会比mahout好一个数量级,因为它不会多次将所有内容写入磁盘。在我的实验中,这些工具能够比10核mahout集群在单个核上的性能提高10倍。因为i/o成本完全支配运行时。
自我标杆
如果你在这方面不信任我,那就给自己做个基准。将reuters数据加载到matlab中,并在那里进行聚类。我敢肯定,matlab会让mahout看起来像一个古老的时尚。