windows下使用mahout|Taste实现协同过滤算法

如果要实现Taste算法,必备的条件是:

1) JDK,使用1.6版本。需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量。

2) Maven,使用2.0.11版本或以上。在eclipse上安装maven插件—m2eclipse。

3)Apache Mahout,使用0.5版本。

Apache Mahout -Taste Documentation中的安装步骤:

[javascript]  view plain copy
  1. 4. Demo  
  2. To build and run the demo, follow the instructions below, which are written for Unix-like  
  3. operating systems:  
  4. 1. Obtain a copy of the Mahout distribution, either from SVN or as a downloaded archive.  
  5. 2. Download the "1 Million MovieLens Dataset" from http://www.grouplens.org/.  
  6. 3. Unpack the archive and copy movies.dat and ratings.dat to  
  7. trunk/taste-web/src/main/resources/org/apache/mahout/cf/taste/example/  
  8. under the Mahout distribution directory.  
  9. 4. Navigate to the directory where you unpacked the Mahout distribution, and navigate  
  10. totrunk.  
  11. 5. Runmvn install, which builds and installs Mahout core to your local repository  
  12. 6. cd taste-web  
  13. 7. cp ../examples/target/grouplens.jar ./lib  
  14. 8. Edit recommender.properties and fill in therecommender.class:  
  15. recommender.class=org.apache.mahout.cf.taste.example.grouplens.GroupLe  
  16. 9. mvn package  
  17. 10.mvn jetty:run-war. You may need to give Maven more memory: in a bash shell,  
  18. export MAVEN_OPTS=-Xmx1024M  
  19. 11.Get recommendations by accessing the web application in your browser:  
  20. http://localhost:8080/RecommenderServlet?userID=1  
  21. This will produce a simple preference-item ID list which could be consumed by a client  
  22. application. Get more useful human-readable output with the debug parameter:  
  23. http://localhost:8080/RecommenderServlet?userID=1&debug=true  
  24. Incidentally, Taste's web service interface may then be found at:  
  25. http://localhost:8080/RecommenderService.jws  
  26. Its WSDL file will be here...  
  27. http://localhost:8080/RecommenderService.jws?wsdl  
  28. ... and you can even access it in your browser via a simple HTTP request:  
  29. .../RecommenderService.jws?method=recommend&userID=1&howMany=10  

一、在window上安装maven


现在Java新架构的不断出现,例如Struts,Spring,Hibernate等,项目的配置文件的增多,给开发人员带来很大麻烦。在实际的开发当中,Myeclipse中的project越来越庞大,所依赖的第三方Jar包越来越多,这显得Project很臃肿,给项目管理带来了很大不便,尤其是在一些大型项目。为了解决上述问题,Apache开源组织发布了Maven,它适用于大的Java项目。

有关maven介绍见《Maven权威指南》 ,下载地址:http://www.juvenxu.com/mvn-def-guide/

安装步骤:

1、下载包,见http://maven.apache.org/download.html

2、解压缩,将其中的bin目录设置到windows Path环境变量中,maven也是依赖jdk的,先装好jdk,在环境变量里面配置好jdk。

2.1、设置JAVA_HOME(顾名其意该变量的含义就是java的安装路径),找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则变量值为“.;%JAVA_HOME%\bin”,

2.2、新建变量名:M2_HOME,变量值:E:\maven\apache-maven-2.2.1,注意这里不含bin的路径。2、在path后追加;%M2_HOME%\bin,注意这里到bin目录

3、测试安装是否成功:开始->运行->cmd->mvn -version

注意:当提示mvn提示不是内部命令或外部命令,是因为在设置环境变量path的时候,可能覆盖了原先设置着的变量,只要在path后面添加变量:%SystemRoot%\system32;

4、在eclipse中安装maven插件 http://she.iteye.com/blog/1217812、http://www.cnblogs.com/freeliver54/archive/2011/09/07/2169527.html

5、使用links管理eclipse插件 http://blog.csdn.net/cfyme/article/details/6099056/

二、在windows上构建Apache Mahout环境


Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout 包含许多实现,包括集群、分类、CP 和进化程序。

详细内容见:

1、Apache Mahout 简介http://www.ibm.com/developerworks/cn/java/j-mahout/

2、Maven 2.0:编译、测试、部署、运行http://www.ideagrace.com/html/doc/2006/06/14/00847.html

开始构建:

1、基于 Apache Mahout 构建社会化推荐引擎http://www.ibm.com/developerworks/cn/java/j-lo-mahout/

本文是由此篇文章引申而来,所以具体就是实现了“Taste的安装于简单的Demo实现”。

2、使用mvn搭建Mahout环境  http://anqiang1900.blog.163.com/blog/static/1141888642010380255296/

简单来说就是将Mahout源码从官网上下载下来后,在dos下切换到根文件夹后执行mvn install。

3、在Eclipse中构建Mahout  http://www.cnblogs.com/dlts26/archive/2011/09/13/2174889.html

就是将Mahout源码导入Eclipse从而形成Maven工程。再在mahout文件夹下执行maven install(如果上一步没做这个的话)。


三、运行Apache Mahout中的Taste Webapp例子


Taste 是 Apache Mahout 提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。

1.修改mahout-taste-webapp工程的pom.xml,添加对mahout-examples的依赖 
<dependency>  
    <groupId>${project.groupId}</groupId>  
    <artifactId>mahout-examples</artifactId>  
    <version>0.5</version>  
</dependency>  
2.在mahout-taste-webapp工程的recommender.properties中添加 
recommender.class=org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommender  
3.从http://www.grouplens.org/node/73上下载数据文件,我下载的是1M Ratings Data Set (.tar.gz)经过测试验证通过,其他数据文件请自行验证。解压以后将ratings.dat复制到mahout-taste-webapp工程的/org/apache/mahout/cf/taste/example/grouplens/下,至于为什么是这个路径?请大家去看这个类GroupLensDataModel。 
4.现在准备工作基本完成了,cd到taste-web我们来运行一把 
mvn jetty:run-war  
5.访问一下http://localhost:8080/RecommenderServlet?userID=1就能看到效果,这个servlet还支持其他参数请参看RecommenderServlet的javadoc说明 

详细内容见http://seanhe.iteye.com/blog/1124682


四、遇到的问题


1、在Eclipse中配置Maven时遇到的问题

启动eclipse的时候会提示warning:找不到jdk啥的,解决办法:
在eclipse.ini文件中加入如下两行(vm指向javaw.exe的位置,或者直接到bin那里也可以):
-vm
D:\Development\Java\jdk1.5.0_16\bin\javaw.exe(注意这两行加到-startup与-launcher.library之间)

2、在windows上构建mahout环境时出现的问题:

2.1 在mahout目录下,运行"mvn install"时,遇到以下错误

Cannot run program "chmod": CreateProcess error=2

chmod是linux命令,此错误是由于 Cygwin + Hadoop 跑在 Windows 上出现的。

也就是说如果当前在windows下进行mahout编译,一定要确保正确安装了Cygwin(按照下面的教程装上Cygwin便可,后面hadoop的配置可以不用全部完成!)

这里用几个比较好的教材,讲解如何在windows下安装Hadoop Cluster(

http://ebiquity.umbc.edu/Tutorials/Hadoop/00%20-%20Intro.html    

http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/) 

下载 hadoop-0.19.1在   http://archive.apache.org/dist/hadoop/core/hadoop-0.19.1/

2.2在Cygwin中运行命令ssh localhost连接不成功时出现Connection closed by ::1错误

Cygwin,耗时近xxxx个小时,查遍中文外文文献,终于将此题目解决。问题描述:在Win7下Cygwin中,使用sshlocalhost命令, 出现Connectionclosedby127.0.0.1的问题。解决方案:1、开端——运行——services.msc2、右键 CYGWINsshd——属性——登录选项卡——选择“此账户”——浏览——高级——立即查找——选择你的账户名(必须为治理员权限)——输进密码(必须 要有,空密码不承受,且和电脑登录密码相同)——确定。3、重启CYGWINsshd效劳即可。这样就以你的账户的名义启动了这个效劳。而后sshlocalhost成功。这样 做的一个缺点可能是你要给电脑设个密码

详见:http://blog.sina.com.cn/s/blog_4abbf0ae0100r8hh.html

3、运行Taste Webapp时遇到的问题

在Eclipse中配置好mahout后,就可以在mahout中运行taste-webapp算法了。

文中1,2步骤由于前面已经配置好,就直接从第3步开始配置mahout-taste-webapp中的内容。

出现的问题:

在浏览器栏输入http://localhost:8080/RecommenderServlet?userID=1后出现错误:

HTTP ERROR: 404

Problem accessing /RecommenderServlet. Reason:

 
  
  
  
 

Not Found

Powered by Jetty://

仔细查看第7步mvn jetty:run-war时,发现其中出现错误:

WARN::FAILED taste-recommender: java.lang.OutOfMemoryError: Java heap space 

表明出现maven工程内存溢出。

解决办法:

Windows环境中

在Maven安装目录中找到文件%M2_HOME%\bin\mvn.bat ,这就是启动Maven的脚本文件,在该文件中你能看到有一行注释为:

  @REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...

它的意思是你可以设置一些Maven参数,我们就在注释下面加入一行:
set MAVEN_OPTS=-Xmx1024M

或者,在执行mvn jetty:run-war命令之前,执行
F:\mahout-distribution-0.5\taste-web>set MAVEN_OPTS=-Xmx1024M

我们看到,配置的Maven选项生效了,OutOfMemoryError也能得以相应的解决。

你可能感兴趣的:(windows下使用mahout|Taste实现协同过滤算法)