基於 Apache Mahout 構建社會化推薦引擎-實戰

參考文章 IBM<<基於 Apache Mahout 構建社會化推薦引擎>>, 文章的連接: http://www.ibm.com/developerworks/cn/java/j-lo-mahout/html

安裝條件:java

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

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

3) Apache Mahout,使用0.5版本。sql

4) Tomcat 7.0 或者其餘版本。數據庫

  1. MySQL

如下會具體說明。apache

1、 Taste的安裝與簡單的 Demo 實現小程序

  1. 下載獲得Apache Mhout的發佈版本。 http://mahout.apache.org/api

    建議下載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 便可;

  1. 若是遇到端口被佔用,則重啓機子,試試。

(由於這部分還算簡單,並且能夠參考的前人的工做不少,因此說的比較簡單)

2、 使用 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下; 而後將movie文件夾刪去。

注意2). Tomcat 下的web.xml 可能有錯,須要改正,多出一個<web-app>,將其刪除。

啓動Tomcat 服務器,(若是jetty服務器開着的話,請關閉)在瀏覽器中輸入http://localhost:8080/MovieSite, 你能夠看到登陸頁面,此時登陸確定會告訴你something wrong,想要Login成功,還要繼續往下走。

5 . 由於如今數據庫中沒有任何數據,既沒有user登陸帳號,也沒有將數據集載入數據庫。所以沒法登錄。

須要向數據庫中添加初始數據。有現成的程序能夠將數據集導入數據庫
參考http://www.cnblogs.com/abelstronger/articles/2093847.html

注意: 1) 將連接中下載獲得的三個小程序代碼,添加入MovieSite工程中:

2) 編譯有錯, 第1、是更改包名:package com.prepare;

第2、缺乏DBUtil.getJDBCConnection()函數。

向DBUtil中添加以下代碼:

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();
        }
    }
}


	第3、更改數據集的路徑,

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。

注意: 執行順序很重要,按照上面執行; 在運行ImportRatings.java,會報錯,即填充movie_preference這張表的時候會出錯,由於用到了users表的外鍵,而users表空的,這時候只須要將與users表的外鍵去掉,便可排錯。

5) 數據庫填充完畢。

6 . 修改Tomcat中的server.xml文件。 找到<Host> ... </Host>,在</Host>以前加入以下代碼:

<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的一個數字,密碼隨便填寫. 順利的話,你將看到以下界面, 大功告成.

推薦界面

我對Java Web 這塊不是特別熟悉,所以我也算是摸着石頭過河,幸虧有這麼多前人作的工做,基本上按着連接上的文章一步步作,也能完成,感謝他們。

可能書寫過程,有遺漏的部分,望你們給個提醒,及時會補上。

可能每一個人在這過程當中,遇到的問題都不太同樣,若是你們遇到什麼問題,Google不出來的,你們能夠一塊兒討論。
相關文章
相關標籤/搜索