上一篇文章“mahout与聚类分析”介绍了如何使用mahout进行聚类分析的步骤,并且结合实例使用k-means对微博名人共同关注数据进行了共被关注聚类分析。mahout运行有本地运行和hadoop运行两种模式,本地运行是指在用户本地的单机模式下运行,就像运行其他普通的
上一篇文章“mahout与聚类分析”介绍了如何使用mahout进行聚类分析的步骤,并且结合实例使用k-means对微博名人共同关注数据进行了共被关注聚类分析。mahout运行有本地运行和hadoop运行两种模式,本地运行是指在用户本地的单机模式下运行,就像运行其他普通的程序一样,但是这样这样就不能最大限度的发挥出mahout的优势,在本文中我们介绍如何让我们的mahout聚类分析程序在hahoop集群上运行(在实际操作中笔者使用的伪分布hadoop,而不是真正的hadoop集群)。
配置mahout运行环境mahout运行配置可以在$mahout_home/bin/mahout里面进行设置,实际上$mahout_home/bin/mahout就是mahout在命令行的启动脚本,这一点与hadoop相似,但也又不同,hadoop在$hadoop_home\conf下面还提供了专门的hadoop-env.sh文件进行相关环境变量的配置,而mahout在conf目录下没有提供这样的文件。
mahout_local与hadoop_conf_dir以上的连个参数是控制mahout是在本地运行还是在hadoop上运行的关键。
$mahout_home/bin/mahout文件指出,只要设置mahout_local的值为一个非空(not empty string)值,则不管用户有没有设置hadoop_conf_dir和hadoop_home这两个参数,mahout都以本地模式运行;换句话说,如果要想mahout运行在hadoop上,则mahout_local必须为空。
hadoop_conf_dir参数指定mahout运行hadoop模式时使用的hadoop配置信息,这个文件目录一般指向的是$hadoop_home目录下的conf目录。
除此之外,我们还应该设置java_home或者mahout_java_home变量,以及必须将hadoop的执行文件加入到path中。
综上所述:
1. 添加java_home变量,可以在直接设置在$mahout_home/bin/mahout中,也可以在user/bash profile里面设置(如./bashrc)
2. 设置mahout_home并添加hadoop的执行文件到path中
两个步骤在~/.bashrc的设置如下:
export java_home=/usr/lib/jvm/java-7-openjdk-i386#export hadoop_home=/home/yoyzhou/workspace/hadoop-1.1.2export mahout_home=/home/yoyzhou/workspace/mahout-0.7export path=$path:/home/yoyzhou/workspace/hadoop-1.1.2/bin:$mahout_home/bin
编辑完~/.bashrc,重启terminal即可生效。
3. 编辑$mahout_home/bin/mahout,将hadoop_conf_dir设置为$hadoop_home\conf
hadoop_conf_dir=/home/yoyzhou/workspace/hadoop-1.1.2/conf
读者可以将相关的hadoop和mahout主目录修改自己系统上面的目录地址,设置好之后重启terminal,在命令行输入mahout,如果你看到如下的信息,就说明mahout的hadoop运行模式已经配置好了。
mahout_local is not set; adding hadoop_conf_dir to classpath. running on hadoop...
要想使用本地模式运行,只需在$mahout_home/bin/mahout添加一条设置mahout_local为非空的语句即可。
mahout命令行mahout为相关的数据挖掘算法提供了相应的命令行入口,同时提供了一些数据分析处理的用到的工具集。这些命令可以通过在终端输入mahout获得。以下显示了输入mahout的部分信息:
....valid program names are: arff.vector: : generate vectors from an arff file or directory baumwelch: : baum-welch algorithm for unsupervised hmm training canopy: : canopy clustering cat: : print a file or resource as the logistic regression models would see it cleansvd: : cleanup and verification of svd output clusterdump: : dump cluster output to text .... fkmeans: : fuzzy k-means clustering fpg: : frequent pattern growth hmmpredict: : generate random sequence of observations by given hmm itemsimilarity: : compute the item-item-similarities for item-based collaborative filtering kmeans: : k-means clustering....
mahout kmeans在上一篇文章,我们通过调用kmeansdriver.run()方法从mahout程序中直接启动kmeans算法,这种方式对于在本地调试程序非常有用,但是在真实项目中,无论是使用hadoop模式运行,还是本地运行,从命令行运行mahout的相关算法更加合适,这样的好处是我们只需要给mahout提供符合相应算法要求的输入数据,即可以利用mahout分布式处理的优势。比如在本例中,使用kmeans算法,只需要事先将数据处理成mahout kmeans算法要求的输入数据,然后在命令行调用mahout kmeans [options]即可。
在命令行输入不带任何参数的mahout kmeans,mahout将为你列出在命令行使用kmeans算法的使用方法。
usage: [--input --output --distancemeasure --clusters --numclusters --convergencedelta --maxiter --overwrite --clustering --method --outlierthreshold --help --tempdir --startphase --endphase ] --clusters (-c) clusters the input centroids, as vectors. must be a sequencefile of writable, cluster/canopy. if k is also specified, then a random set of vectors will be selected and written out to this path first
相关的参数我们已经在上篇文章中提到过。
具体的步骤如下:
1. 将数据处理为mahout向量(vector)的形式2. 将mahout向量转化为hadoop sequencefile3. 创建k个初始质心\[可选\]4. 将mahout向量的sequencefile复制到hdfs上5. 运行`mahout kmeans [options]`
下面的命令显示使用cosinedistancemeasure对data/vectors目录下mahout向量数据进行kmeans聚类分析,输出结果保存在output目录下。
mahout kmeans -i data/vectors -o output -c data/clusters \-dm org.apache.mahout.common.distance.cosinedistancemeasure \-x 10 -ow -cd 0.001 -cl
更加详细的命令行参数可以在mahout wiki k-means-commandline上查找到。
总结本文首先介绍了如何配置mahout的hadoop的运行环境,然后介绍如何使用mahout kmeans命令行将聚类分析运行在hadoop上。
原文地址:让mahout kmeans聚类分析运行在hadoop上, 感谢原作者分享。
