hadoop上执行mahout的kmeans算法

Mahout 是一套具有可扩充能力的机器学习类库。它提供机器学习框架的同时,还实现了一些可扩展的机器学习领域经典算法的实现,可以帮助开发人员更加方便快捷地创建智能应用程序。通过和 Apache Hadoop 分布式框架相结合,Mahout 可以有效地使用分布式系统来实现高性能计算。(类官方的解释)

做这个实验我感觉最重要的就是hadoop与mahout的版本问题。我先后进行了三大次的尝试,总算是跑成功了,这里写出来,提供给想做这个实验的一些小经验吧。

先写出用的两条重要的命令吧:

执行聚类:mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

分析聚类的结果:$MAHOUT_HOME/bin/mahout clusterdump --seqFileDir /user/xxxxxx/output/clusters-10-final --pointsDir /user/kerry/output/clusteredPoints --output $MAHOUT_HOME/examples/output/clusteranalyze.txt       注:xxxxxx代表用户名

第一次:我用的是hadoop-0.20.2和mahout0.4-mahout0.7,jdk1.6

mahout能在本地运行,但是不能在hadoop运行。

第二次:hadoop-1.0.3 和mahout0.6    jdk0.6

mahout能在hadoop上执行聚类,但是在执行的中间会报错:org.apache.mahout.math.CardinalityException: Required cardinality 23 but got 60

第三次:hadoop-1.1.2和mahout0.6  jdk0.7(由于一次失误操作,我把本次实验需要的全部软件和数据都删除了,所以就都换新的软件进行了尝试,本来没想到会跟hadoop的版本有这么大的关系的,在此提醒:一定要做好备份)

mahout能在hadoop上执行聚类,并且能够对聚类结果进行分析,即实验完成。

实验过程:

1、装hadoop和mahout(也就是配置环境变量)

export JAVA_HOME=/home/自己的用户名/hadoop/jdk1.7.0_04
export MAVEN_HOME=/home/自己的用户名/hadoop/apache-maven-3.0.5
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:/home/自己的用户名/hadoop/mahout/mahout-distribution-0.6/bin:$MAHOUT_HOME/bin:/home/自己的用户名/hadoop/shell:$MAVEN_HOME/bin
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/lib:/home/自己的用户名/hadoop/mahout/mahout0.6/lib
export HADOOP_HOME=/home/自己的用户名/hadoop/hadoop-1.1.2
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export MAHOUT_HOME=/home/自己的用户名/hadoop/mahout/mahout-distribution-0.6
 
2、启动hadoop
格式化:hadoop namenode -format
启动:start-all.sh
 
3、下载分析的数据,并进行聚类和分析
数据地址:http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
数据copy到hdfs:hadoop fs -mkdir testdata               hadoop fs -put <PATH TO synthetic_control.data> testdata
在hadoop上执行kmeans聚类:mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
查看聚类产生的结果:hadoop fs -ls output
分析聚类产生的结果:$MAHOUT_HOME/bin/mahout clusterdump --seqFileDir /user/自己的用户名/output/clusters-10-final --pointsDir /user/kerry/output/clusteredPoints --output $MAHOUT_HOME/examples/output/clusteranalyze.txt
 
我的毕设是在hadoop做一个分类,正在研究mahout,有研究这方面的可以交流一下。。
关于mahout做分类的学习我还会继续更新的。。