最近想实协同过滤的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 表示的是转化成本地可读的文件