Mahout实战案例--Dating Recommender 系统
Mahout实战案例--Dating Recommender 系统
软件版本:
Hadoop:2.6.0; Mahout:1.0(自行编译,只使用了两个jar文件);Spring:4.0.2;Struts:2.3;Hibernate:4.3;jQuery EasyUI :1.3.6;MySql:5.6;浏览器:chrome;MyEclipse:10.0;
Hadoop平台配置:
node1: NameNode/ResourceManger/DataNode/NodeManager Memory:2G
node2: NodeManager/DataNode/SecondaryNameNode/JobHistoryServer Memory:1.5G
node3: NodeManager/DataNode Memory:1.5G
代码下载:
------------------------------------------分割线------------------------------------------
FTP地址:ftp://ftp1.bkjia.com
用户名:ftp1.bkjia.com
密码:www.bkjia.com
在 2015年LinuxIDC.com\3月\Mahout实战案例--Dating Recommender 系统
下载方法见
------------------------------------------分割线------------------------------------------
系统运行:
(其中ratings.dat和gender.dat文件需要从 http://www.occamslab.com/petricek/data/下载)
1. 数据库部分:
1)修改configuration/db.properties 文件,改为用户自己的用户名、密码以及数据库;
2)启动tomcat,让Hibernate自动生成相关表。启动后可以看到数据库中有下面的表:
拷贝sql/treenode.sql中的第49行语句到命令行执行,然后浏览器访问tomcat发布的项目,比如这里的http://localhost:80/rec/ (或者http://localhost/rec/basic.jsp)即可访问项目主页,界面如下:
3) 下载相关数据文件,下载解压后文件如下:
修改configuration/util.properties文件中相应文件的路径,修改rating.proportion,该比例为数据ratings.dat分隔的比例,由于云平台运行协同过滤算法比较耗时,而且消耗内存较大,如果使用全部数据(245M)那么运行CF算法时会比较慢,这里采取上传一部分数据的方法,即先对ratings.dat进行分割,然后上传较小比例到云平台进行计算。如果使用的云平台计算资源较充分,可以设置该比例为1,同时上传较大的文件;
4)初始化用户基本信息表(即gender.dat数据入库)
在浏览器导航列表中选择“用户表初始化”或者在右上角系统设置中点击“初始化用户表”进行用户表数据导入;插入完成后,浏览器会有提示:
tomcat会有日志提示有插入耗时以及数据量,在数据库中查询t_user表中的记录数和此数据量相同;
5) 插入用户评分数据(即ratings.dat数据入库)
由于此数据量较大,所以不使用Hibernate插入,而直接使用命令行的方式插入。拷贝sql/import_ratings.sql中的第4行命令(需修改ratings.dat文件位置)到mysql编辑器执行(或者dos命令窗口执行也行),一般耗时300s左右;插入完成后,可以查询到表t_user_item_pref有 17359346条记录。
由于后面会根据userid进行查询,所以这里加上索引,运行第16行命令,一般耗时:4mins。
2. 云平台数据部分
1) 分割ratings.dat文件
点击浏览器右上角系统设置的“分割Rating数据” ,即可分割数据,分割完成后会给出下面的提示:
,后台也会提示数据分割完成!
分割后的数据在原始的ratings.dat所在的文件夹中,分为两部分,一个big为较大部分,一个为small为较小部分;
2)云平台验证:
点击导航中的“云平台验证”,在Tab页中相应的位置输入NameNode、Resourcemanager的ip以及端口(由于这里本机做了ip和机器名的映射,所以使用机器名亦可),验证成功给出提示:
3) 上传ratings.dat文件到云平台
点击导航中的“数据上传”,在出现的Tab中选择刚才分割产生的small较小部分点击上传,即可上传数据到云平台;
,
3. 云平台算法部分
0) 拷贝WebRoot/WEB-INF/lib下面的三个包到集群所有节点的目录:
1) Top算法:计算所有评分中平均分最高的Top个,在页面设置,比如:
由于集群有三个节点,所以这里设置reducer的个数为3,最小评分人数是指评分的人数,如果某个item只有一个人评分,而且是10分(最高分),那么其平均分也是10分,这样明显不合适,所以设置这个值可以剔除一些不合理的值;
设置好参数后,点击提交,会给出正在提交任务到云平台的提示,任务提交完成,即可打开算法监控界面,如下:
任务运行完成,会进行Top数据解析入库:
入库成功后,在表t_rec_top中查询到300条记录;
2)调用协同过滤算法
点击导航中的“协同过滤算法”,在弹出的Tab页面设置参数,点击提交,与Top算法类似,不过其监控界面不同,一般如下(此算法运行事件比较长):
运行过程1:
运行过程2:
运行过程3:
CF算法解析主要是更新用户的推荐数据。
3) 调用单用户推荐
单用户推荐就是把云平台上推荐的结果展示而已,比如下面的数据
在单用户推荐界面可以看到下图:
4) 新用户推荐界面:
注意在调用新用户推荐算法前,需要先调用CF算法,因为新用户推荐算法的输入数据是CF算法中间的一个步骤产生的数据;
新用户推荐先选择需要展示的top用户的性别:
然后确定后,会显示top用户,可以对其进行评分(这里只能是盲目的评分,因为没有其他信息)
评分默认是5,可以进行编辑,编辑后保存即可,最后点击推荐。点击推荐类似Top算法,会向云平台提交新用户推荐任务,然后是监控界面:
查询相似推荐后,会给出推荐的列表(暂时设置为5个):
更多详情见请继续阅读下一页的精彩内容:
Mahout驾驭Hadoop之详解
Ubuntu 10.04下Mahout 安装步骤详解
Mahout的安装配置与使用
Hadoop2.2+Mahout0.9实战
|
评论暂时关闭