使用Hadoop和 Mahout实现推荐引擎

通过大数据分析,可以实现推荐机制,比如对电视观众浏览视频的大数据跟踪分析,可以得出点播排行榜 分析出用户的观看喜好习惯,并投其所好推荐一些影片等等。
在电子商务网站,推荐功能就变成了导购功能。
文章:使用Hadoop和 Mahout实现推荐引擎 Implementing a recommender engine using Hadoop and Mahout | GoSmarter Tech Blog谈了这一推荐机制的大概实现架构:

大数据挖掘涉及组件有: Hadoop, Mahout, Sqoop, Flume and Mongo-Hadoop Connector。

首先,作者谈到,实现推荐机制需要两个前提,Hadoop的一些算法需要重写以利用并行计算;第二,通过Mahout利用Hadoop实现推荐算法。

Terasort是一种基于MapReduce的排序技术,类似地,也需要基于MapReduce一套推荐算法,有两个要求:基于用户或Item的推荐,相似度推荐。

推荐系统主要实现步骤:
1.第一步建立一个有关Item的共生矩阵,这个Item可以是影片 商品条目等等,它主要关注:用户购买时,发生了多少次2 item,如同N次序的正方形矩阵,N是用户购买的所有条目数。

其次计算用户有关其购买的Item矢量,只有一个矩阵列。

最后将共生矩阵和用户矢量相乘,获得推荐数据。

假设交易数据在MySQL中,使用sqoop脚本导入数据到HDFS:
sqoop import --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem

然后在Hadoop中运行mahout脚本:
hadoop jar mahout-core-0.6-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --usersFile input/users.txt --booleanData --similarityClassname SIMILARITY_COOCCURRENCE

最后,运行sqoop脚本导出分析结果回Mysql:
sqoop export --connect jdbc:mysql://localhost/reservation --username krishna --password pass123 --table useritem --export-dir useritem/part-m-00000

这样,在你的应用中,通过查询Mysql的useritem 表,就可以获得推荐数据了。

这套系统已经在Netflix, Amazon, eBay, Gilt 等得到应用,主要架构图如下:


[该贴被banq于2012-11-26 11:10修改过]