最近想实协同过滤的MR算法,但是网上查了一下,发现hadoop的生态系统中的Mahout的项目已经实现了相应的算法,因此想先尝试着实时这个mahout的使用及效果。要想用mahout必须要部署到hadoop上咯。

1、下载mahout的版本,并解压缩到本地

通过 http://mahout.apache.org/ 下载相应的版本,我下载的是mahout-distribution-0.9.tar.gz版本。

tar -zxvf mahout-distribution-0.9.tar.gz

mv mahout-distribution-0.9  mahout-0.9 

2、配置环境变量

export MAHOUT_HOME=/home/grid/mahout-0.9

export PATH=$JAVA_HOME/bin:$MAHOUT_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$MAHOUT_HOME/lib

3、启动hadoop

4、测试mahout

  mahout --help    #检查Mahout是否安装完好,看是否列出了一些算法

这里要注意一下:上面的命令输入回车之后,会出现:MAHOUT_LOCAL not set 的信息时,此时不用惊慌,正如所显示的信息内容一样,mahout并没有在本地运行,而是在hadoop上面运行。

5、测试Kmeans算法

  1)下载一个文件synthetic_control.data,下载地址http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data。

  2)建立输入文件的目录testdata,要想测试mahout自带的kmeans的例子,输入数据的目录名称必须为testdata。并将synthetic_control.data上传到hdfs上。

      hadoop fs -mkdir testdata

      hadoop fs -put /home/grid/synthetic_control.data testdata

  3)执行命令

  hadoop jar /home/grid/mahout-0.9/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

  4)查看kmeans的输出结果。Kmeans例子是10迭代。

  hadoop fs -ls /user/grid/output/   会显示每次迭代的结果:

  

  5)执行完之后,查看结果

  若直接通过hadoop fs -cat 方式查看的话,会出现乱码,mahout的最新版本查看结果的方式是通过下面三种方式:

  mahout seqdumper:将SequenceFile文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java
  mahout vectordump:将向量文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.vectors.VectorDumper.java
  mahout clusterdump:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java

  mahout clusterdump --input /user/grid/output/data/part-m-00000 --output liujiyu.txt

  --inpput 表示的是输入参数

  --output 表示的是转化成本地可读的文件