基于 Apache Mahout 构建社会化推荐引擎

参考文章 IBM«基于 Apache Mahout 构建社会化推荐引擎»,
文章的链接: http://www.ibm.com/developerworks/cn/java/j-lo-mahout/

安装条件:

1) JDK,使用1.6版本。 MyEclipse /Eclipse

2) Maven,使用2.0.11版本或以上。

3) Apache Mahout,使用0.5版本。

4) Tomcat 7.0 或者其他版本。

5) MySQL

以下会具体说明。

一、 Taste的安装与简单的 Demo 实现

  1. 下载得到Apache Mhout的发布版本。 http://mahout.apache.org/

    建议下载0.5版本 mahout-distribution-0.5-src.zip,解压缩。

  2. 下载Maven,并且配置环境,见
    http://blog.csdn.net/highram/article/details/7190839

  3. 在MyEclipse或者Eclipse中构建Mahout,见http://www.cnblogs.com/dlts26/archive/2011/09/13/2174889.html

  4. 启动jetty服务器:
    cmd 在 taste-web目录下敲命令:mvn jetty:run-war
    输入url: http://localhost:8080/mahout-taste-webapp/RecommenderServlet?userID=1,
    测试一下。
    你将看到如下界面:

    Taste Demo 运行结果界面

则表示你已经成功实现了Taste Demo.

其中, 也许你会遇到如下的问题:

1) 启动jetty服务器时, 敲入 mvn jetty:run-war 无法正常执行。

只需将命令改成 mvn org.mortbay.jetty:maven-jetty-plugin:run ;

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

此时敲入命令 set MAVEN_OPTS=-Xmx1024M 即可;

3) 如果遇到端口被占用,则重启机子,试试。

(因为这部分还算简单,而且可以参考的前人的工作很多,所以说的比较简单)

二、 使用 Taste 构建推荐引擎实例 – 电影推荐引擎

下面将介绍如何使用以上的 Taste 方便地构建自定义的推荐引擎.

注意,在IBM那篇文章《基于 Apache Mahout 构建社会化推荐引擎》的结尾,有打包好的源 码,只需要下载就OK。

1 . 将源码src压缩包解压缩以后,将其中的MovieSite工程载入MyEclipse,或者Eclipse中,我用的是MyEclipse.
载入MovieSite

添加jar包

2 . 添加jar包.

如上图所示,最后四个jar包是源工程中没有的。这四个jar包分别是:

Servlet-api.jar, jasper.jar, jsp-api.jar 以及mysql-connector-java-5.1.25-bin.jar。

前三个在Tomcat目录下的lib 文件夹下面可以找到,如果是低版本的Tomcat,则可以在common/lib目录下找到前三个jar包。

最后一个jar包是mysql实现的用于java的jdbc操作的jar包,这个jar可以在MySQL官网上下载。

http://dev.mysql.com/downloads/connector/j/。

注意,

1) 首先必须将最后一个mysql-connector-java-5.1.25-bin.jar包放入Tomcat的lib目录下;

2) 一起导入MyEclipse之中。即右击Build Path->Configure Build Path->Add External JARs,添加4个jar。

3) 同时删除因为路径无效的jar包。

3 . 基本上MyEclipse不会报错,如果报错,按照提示修正。

(如果有错,可以参考CSDN上的一篇blog:
http://blog.csdn.net/softwarehe/article/details/7465151,但是上面说的很多问题,我没有遇到,也就没有修改。)

4 . 如果MovieSite不再有错,则可以将项目可以放置到tomcat下webapps下。

注意1):首先我们需要将src/MovieSite/movie下的全部文件,直接拷进MovieSite下;

?
1
然后将movie文件夹删去。

注意2). Tomcat 下的web.xml 可能有错,需要改正,多出一个 ,将其删除。

启动Tomcat 服务器,(如果jetty服务器开着的话,请关闭)在浏览器中输入http://localhost:8080/MovieSite, 你可以看到登录页面,此时登录肯定会告诉你something wrong,想要Login成功,还要继续往下走。

5 . 因为现在数据库中没有任何数据,既没有user登录账号,也没有将数据集载入数据库。因此无法登陆。

?
1
2
需要向数据库中添加初始数据。有现成的程序可以将数据集导入数据库
参考http: //www.cnblogs.com/abelstronger/articles/2093847.html

注意:
1) 将链接中下载得到的三个小程序代码,添加入MovieSite工程中:

2) 编译有错,
第一、是更改包名:package com.prepare;

第二、缺少DBUtil.getJDBCConnection()函数。

向DBUtil中添加如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static  Connection getJDBCConnection()
{
     String driverClassName = "com.mysql.jdbc.Driver" ;
     String url = "jdbc:mysql://localhost/movie" ;
     String username = "username" ;     //修改为你自己用户名
     String password = "password" ;      //修改为你自己密码
 
     Connection conn = null ;
 
     try {
         Class.forName(driverClassName);
         conn = DriverManager.getConnection(url, username, password);
     } catch (ClassNotFoundException e) {
         e.printStackTrace();
     } catch (SQLException e) {
         e.printStackTrace();
     }
 
     return conn;
}
public static void closeConnection(Connection conn)
{
     if (conn!= null )
     {
         try {
             conn.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
}
 
 
     第三、更改数据集的路径,

LineNumberReader lineReader = new LineNumberReader(new FileReader(“”)); “”中填

写相应数据集在你计算机上的绝对路径。

3) 由于用到MySQL数据库,所以下载,安装,启动,并新建一个数据库movie,
并且利用源码中com.ibm.taste.example.movie.init包中tables.sql, sql语句为movie数据库创新4张表。

4) 依次运行ImportMovies.java、ImportRatings.java以及ImportUsers.java。

注意: 执行顺序很重要,按照上面执行;

?
1
在运行ImportRatings.java,会报错,即填充movie_preference这张表的时候会出错,因为用到了users表的外键,而users表空的,这时候只需要将与users表的外键去掉,即可排错。

5) 数据库填充完毕。

6 . 修改Tomcat中的server.xml文件。
找到 … ,在之前加入如下代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Context path= "/MovieSite" docBase= "/usr/local/tomcat/webapps/MovieSite"               
 
debug= "0" reloadable= "true" >
             <Resource name= "jdbc/movie" auth= "Container" type= "javax.sql.DataSource"
                     username= "username"
                     password= "password"
                     driverClassName= "com.mysql.jdbc.Driver"
                     url= "jdbc:mysql://localhost:3306/movie"
                     maxActive= "15"
                     maxIdle= "7"
                     defaultTransactionIsolation= "READ_COMMITTED"
                     validationQuery= "Select 1" />
</Context>
 
其中的docBase和username,password等修改为你自己对应的值;

7 . 最后一步了,重新启动Tomcat , 用户登录的邮件地址查找movie数据库下的users表,随便输入一个即可,一般是test@gmail.com ,其中是1-6040的一个数字,密码随便填写. 顺利的话,你将看到如下界面, 大功告成.

推荐界面

转载:http://my.oschina.net/zhayefei/blog/142493

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值