设为首页 收藏本站
查看: 1224|回复: 0

[经验分享] mahout入门实例-基于 Apache Mahout 构建社会化推荐引擎-实战(参考IBM)

[复制链接]

尚未签到

发表于 2015-7-31 11:07:04 | 显示全部楼层 |阅读模式
  基于 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版,解压,然后添加系统环境变量,如下
DSC0000.png
DSC0001.png
  然后运行cmd,输入ant,出现如下界面说明环境变量配置成功
DSC0002.png
  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),解压,添加环境变量,如下
DSC0003.png
DSC0004.png
  运行cmd,输入mvn –version,如下即可
DSC0005.png
  下面最好还配置下maven的本地仓库,当maven在本地仓库找不到依赖包,才去apache的中央仓库找。
  打开maven的conf目录下的settings.xml文件,如下图修改
DSC0006.png
  效果如下
DSC0007.png
  接下来还需要在eclipse中下载m2eclipse插件,由于因为国内经常被墙,所以这里介绍离线安装方式。
  网上下载eclipse的maven插件离线包(我下的是eclipse-maven3-plugin.7z),解压,然后在eclipse的根目录下创建一个links文件夹和一个maven-plugin文件夹,将刚解压的maven插件的features和plugins文件夹放到maven-plugin文件夹下,并在links文件夹下新建一个maven.link文件,输入内容path=maven插件的路径(这里就是maven-plugin的路径,注意要是绝对路径),如下图
DSC0008.png
  重启eclipse就发现maven已出现在列表中。
  接下来还需要在eclipse中配置下maven。
  选择window – preferences,选择maven,点击右侧的add,将maven的安装目录添加进去,如下图
DSC0009.png
  点击确定后,再点击User Settings,将其中的路径改成maven目录下conf文件夹下的settings.xml,如下图所示
DSC00010.png
  到此maven插件安装成功。
  点击window – show view – console,此时console下就会有个maven控制台。
DSC00011.png
  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),然后执行如上命令,具体见下图:
DSC00012.png
  安装模板包,同上:
  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(换成所在的路径),如下图所示
DSC00013.png
  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使用截图如下.
DSC00014.png
  下载源码包后,接下来开始构建mahout,同样有两种方式,使用maven命令和利用eclipse的maven插件(分别对应着上面的maven安装和eclipse的maven插件安装两种方式)。
  为了方便起见,下面以Eclipse为例,在eclipse中,右键import,选择Existing maven project,如下图
DSC00015.png
  选择刚解压的mahout的源码目录
DSC00016.png
  等待eclipse解析后(电脑有点慢,花了好久),点击结束,这样一个项目就导入进去了,下面进入一个实例。
  5)  参考ibm的一篇“基于 Apache Mahout 构建社会化推荐引擎”的文章
  下载文章最后的src.zip,解压,用eclipse导入,项目目录如下
DSC00017.png
  接下来还需要额外导入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目录下,
DSC00018.png
  在eclipse中右键项目选择Build Path,添加这4个包,同时要删除同时删除因为路径无效的jar包
DSC00019.png
  此时eclipse中的项目目录如下
DSC00020.png
  将MovieSite下的movie全部复制到tomcat下的webapps目录下,开启tomcat,在浏览器中输入localhost:8080/movie,打开如下图
DSC00021.png
  此时如果登陆,肯定失败。因为现在数据库中没有任何数据,既没有user登录账号,也没有将数据集载入数据库。因此无法登陆
  下载http://www.iyunv.com/abelstronger/articles/2093847.html中的src文件(3个java源文件),导入到eclipse中的MovieSite项目,如下
DSC00022.png
  接下来还需要修改这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();
  }
  }
  }
  效果如下
DSC00023.png
  使用ctrl+shift+o将DriverManager导入即可,修改下函数参数,最终如下
DSC00024.png
  接下来还需要修改ImportMovies.java、ImportRatings.java以及ImportUsers.java,具体如下
DSC00025.png
DSC00026.png
DSC00027.png
  接下来需要安装mysql,然后新建一个连接(这里随便取名了localhost)和一个数据库叫movie。
  运行源码中com.ibm.taste.example.movie.init包中tables.sql,如下图
DSC00028.png
  运行完结果就创建出如上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表的外键去掉,
DSC00029.png
  运行ImportRatings.java。
  注:如果有报错如下
DSC00030.png
  则报错的原因通常认为的内存不足,java虚拟机内存不够用。
  最后运行ImportUsers.java,到此数据库数据准备完成。
  最后将MovieSite下的movie文件夹 复制到tomcat下的webapps下,同时修改tomcat/conf下的server.xml,在前增加如下一段
  
  
  
  效果如下
DSC00031.png
  到此大功告成。下面启动tomcat,在浏览器中输入http://localhost:8080/MovieSite/,效果如下
DSC00032.png
  随便输入用户名(如test@gmail.com),点login,出现如下推荐界面
DSC00033.png
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92672-1-1.html 上篇帖子: apache和tomcat的区别 下篇帖子: IIS与Apache同时使用80端口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表