mahout入门实例-基于 Apache Mahout 构建社会化推荐引擎-实战(参考IBM)
基于 Apache Mahout 构建社会化推荐引擎-实战(参考IBM)
文章地址:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/
由于第一次接触mahout等,有些地方理解不对烦请指出!
步骤:
Windows版:
1) 首先安装JDK(1.6及以上)
2) Ant(1.7及以上)
http://www.apache.org/dist/ant/binaries/下载bin版,解压,然后添加系统环境变量,如下
然后运行cmd,输入ant,出现如下界面说明环境变量配置成功
3) 下载maven
因为mahout是利用maven来进行管理的,maven是一种项目构建工具,可以对多个依赖项目进行管理,当你导入利用maven描述的项目时,就会把其描述的所有依赖项目全部导入。另外他还有一些管理的资源库,你不需要自己导入jar包,只要你在pom.xml中做了描述,maven就会自动从自己的资源库上帮你把jar下载并导入到你的工程中,具体可以上网查下maven的项目构建方法。
http://maven.apache.org/download.cgi下载maven(我的是apache-maven-3.1.1-bin.zip),解压,添加环境变量,如下
运行cmd,输入mvn –version,如下即可
下面最好还配置下maven的本地仓库,当maven在本地仓库找不到依赖包,才去apache的中央仓库找。
打开maven的conf目录下的settings.xml文件,如下图修改
效果如下
接下来还需要在eclipse中下载m2eclipse插件,由于因为国内经常被墙,所以这里介绍离线安装方式。
网上下载eclipse的maven插件离线包(我下的是eclipse-maven3-plugin.7z),解压,然后在eclipse的根目录下创建一个links文件夹和一个maven-plugin文件夹,将刚解压的maven插件的features和plugins文件夹放到maven-plugin文件夹下,并在links文件夹下新建一个maven.link文件,输入内容path=maven插件的路径(这里就是maven-plugin的路径,注意要是绝对路径),如下图
重启eclipse就发现maven已出现在列表中。
接下来还需要在eclipse中配置下maven。
选择window – preferences,选择maven,点击右侧的add,将maven的安装目录添加进去,如下图
点击确定后,再点击User Settings,将其中的路径改成maven目录下conf文件夹下的settings.xml,如下图所示
到此maven插件安装成功。
点击window – show view – console,此时console下就会有个maven控制台。
Maven常用命令:
Maven在使用过程中时常遇到下载不了jar包的问题,于是需要手动下载好jar包,然后执行mvn install命令安装。如下命令
mvn install:install-file -Dfile=jar包的位置 -DgroupId=jar包的groupId -DartifactId=jar包的artifactId -Dversion=jar包的version -Dpackaging=jar
首先下载要安装的jar文件(如maven-resources-plugin-2.5.jar),然后执行如上命令,具体见下图:
安装模板包,同上:
mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=1.1 -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar(换成所在的路径),如下图所示
mvn dependency:tree
查看依赖树。目前没用到。
mvn clean,mvn install等
maven构建的生命周期默认有以下几个阶段:1)validate. 2)compile. 3)test. 4)package. 5)integration-test. 6)verify. 7)install. 8)deploy.
当执行mvn deploy命令它会执行deploy之前所有的阶段,包括deploy阶段。
执行mvn integration-test它会执行阶段1),2),3),4),5)阶段。
Mvn clean install会先执行mvn clean,然后再执行mvn install,相当于更新项目中的依赖包后再install。
4) 构建mahout
这里要说明一下mahout的运行版本。
mahout-0.5, mahout-0.6, mahout-0.7,是基于hadoop-0.20.2x的。
mahout-0.8, mahout-0.9,是基于hadoop-1.1.x的。
mahout-0.7,有一次重大升级,去掉了多个算法的单机内存运行,并且了部分API不向前兼容。
Mahout提供了已构建好的版本(如mahout-distribution-0.8.zip)和源码版本(mahout-distribution-0.8-src.zip),下面我们使用源码包。要获取mahout源码包,有如下两种方法
方法1:http://mahout.apache.org下载mahout(mahout-distribution-0.8-src.zip),解压
方法2:svn,地址 http://svn.apache.org/repos/asf/mahout/trunk
方法2使用截图如下.
下载源码包后,接下来开始构建mahout,同样有两种方式,使用maven命令和利用eclipse的maven插件(分别对应着上面的maven安装和eclipse的maven插件安装两种方式)。
为了方便起见,下面以Eclipse为例,在eclipse中,右键import,选择Existing maven project,如下图
选择刚解压的mahout的源码目录
等待eclipse解析后(电脑有点慢,花了好久),点击结束,这样一个项目就导入进去了,下面进入一个实例。
5) 参考ibm的一篇“基于 Apache Mahout 构建社会化推荐引擎”的文章
下载文章最后的src.zip,解压,用eclipse导入,项目目录如下
接下来还需要额外导入4个jar包,分别是servlet-api.jar, jasper.jar, jsp-api.jar 以及mysql-connector-java-***-bin.jar,前3个都可以在tomcat的libs下找到,最后一个需要去mysql的网站去下载mysql-connector-java-5.1.28.zip,从压缩包中解压出jar包放到tomcat下lib目录下,
在eclipse中右键项目选择Build Path,添加这4个包,同时要删除同时删除因为路径无效的jar包
此时eclipse中的项目目录如下
将MovieSite下的movie全部复制到tomcat下的webapps目录下,开启tomcat,在浏览器中输入localhost:8080/movie,打开如下图
此时如果登陆,肯定失败。因为现在数据库中没有任何数据,既没有user登录账号,也没有将数据集载入数据库。因此无法登陆
下载http://www.cnblogs.com/abelstronger/articles/2093847.html中的src文件(3个java源文件),导入到eclipse中的MovieSite项目,如下
接下来还需要修改这3个java中的错误
首先需要更改package名,然后发现缺少DBUtil.getJDBCConnection()函数,于是需要去com.ibm.taste.example.movie.utils包下的DBUtil.java文件中添加如下两个函数
public static Connection getJDBCConnection()
{
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/movie";
String username = "username"; //修改为你自己用户名,如root
String password = "password"; //修改为你自己密码,如root
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();
}
}
}
效果如下
使用ctrl+shift+o将DriverManager导入即可,修改下函数参数,最终如下
接下来还需要修改ImportMovies.java、ImportRatings.java以及ImportUsers.java,具体如下
接下来需要安装mysql,然后新建一个连接(这里随便取名了localhost)和一个数据库叫movie。
运行源码中com.ibm.taste.example.movie.init包中tables.sql,如下图
运行完结果就创建出如上4张表。
依次运行ImportMovies.java、ImportRatings.java以及ImportUsers.java,注意顺序。
开始运行ImportMovies.java总是报错“错误: 找不到或无法加载主类”,右键项目,选择Build Path,把里面有问题的jar都remove,同时把刚添加的那4个包也remove,将4个包复制到项目WEB-INF下lib目录中,然后再如上添加Build Path。
再次运行ImportMovies.java,运行完就可以发现movies表中已经增加了很多数据。
在运行ImportRatings.java的时候,因为填充movie_preference这张表的时候用到了users表的外键,而users表空的,所以可能会报错,所以需要将与users表的外键去掉,
运行ImportRatings.java。
注:如果有报错如下
则报错的原因通常认为的内存不足,java虚拟机内存不够用。
最后运行ImportUsers.java,到此数据库数据准备完成。
最后将MovieSite下的movie文件夹 复制到tomcat下的webapps下,同时修改tomcat/conf下的server.xml,在</Host>前增加如下一段
<Context path="/MovieSite" docBase="D:\recommended\apache-tomcat-7.0.47\webapps\movie"
debug="0" reloadable="true">
<Resource name="jdbc/movie" auth="Container" type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/movie"
maxActive="15"
maxIdle="7"
defaultTransactionIsolation="READ_COMMITTED"
validationQuery="Select 1" />
</Context>
效果如下
到此大功告成。下面启动tomcat,在浏览器中输入http://localhost:8080/MovieSite/,效果如下
随便输入用户名(如test@gmail.com),点login,出现如下推荐界面