当前位置:首页 > PHP教程 > PHP总结归纳

让MahoutKMeans聚类分析运行在Hadoop上

上一篇文章“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_homeconf下面还提供了专门的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.2
export mahout_home=/home/yoyzhou/workspace/mahout-0.7
export path=$path:/home/yoyzhou/workspace/hadoop-1.1.2/bin:$mahout_home/bin

编辑完~/.bashrc,重启terminal即可生效。

3. 编辑$mahout_home/bin/mahout,将hadoop_conf_dir设置为$hadoop_homeconf

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 sequencefile
3. 创建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上。


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!