这个分类 我主要想分享基于hadoop构建智能推荐系统的过程思路、程序设计和系统架构方面的一些技巧心得,至于hadoop、sqoop、hbase的安装和使用我就很少讲了,网上已经有不少这方面的文章了 mysql

让咱们直奔主题吧。 算法

1、 咱们要搭建一个智能推荐系统最重要的是什么呢?不是算法、也不是系统的自己,最关键是准确分析用户的行为数据,最终得出一个用户偏好表。有了这个用户偏好 表,咱们能够作的事太多了,好比计算用户的类似度、计算物品的类似度、把用户按照行为进行聚类。。。可是这一切的前提都必须有一个“用户偏好表”(如图表1-1)。 sql

图表1-1用户偏好表 shell

Uid(用户id) 数据库

Itemid(物品id) 架构

Preference(偏好值) app

Timestamp(时间戳) 框架

1001 分布式

1005 工具

4.5

123278545

1002

1008

3.5

123577865

1001

1008

5.0

123478588

2、(下面我将以视频网站的智能推荐系统为例子)

为了获得这样的一张表,咱们首先要对用户的行为进行分析,视频网站的用户行为通常为 观看记录、评分记录、顶/踩、评论记录。。。

咱们按照预先设定的权重(图表2-1),将这些行为数据进行简单的权重相加,得出一个比较粗糙的偏好评分。

图表2-1行为权重(后面的行为记分覆盖前面的行为记分)

行为:

权重:

观看记录

每观看一次+2分若是看了3次以上直接给满分

顶/踩

顶记3分踩记1分

评论记录

对评论内容关键词进行智能分析

中评记3.5分差评记1分好评记4.5分

评分记录

打多少分就是多少分

3、好了,经过上面这两步分析,咱们已经知道咱们须要什么样的数据了,固然也知道这些数据通常都存放在传统的数据库中(如mysql),可是 这些数据一般都是海量的,增加极快的,因此咱们最好把这些行为数据导出到hadoop的hdfs文件系统中(或hbase中),这样就能够很方便的使用hadoop的分布式计算框架去处理这些数据了。不过问题又来了,因为数据是海量的,不断增加的,咱们不能每次计算都将所有数据进行从新导入,这样mysql会鸭梨很大的,因此咱们必需要作增量导入,第一次导入全部的数据,第二次开始只导入后来增加的数据。

4、下面介绍一个解决这个问题的强大工具:sqoop。Sqoop支持mysql、hdfs文件、hbase、hive之间的导入导出,还能够实现增量导入。

好比我要将 观看记录 从mysql导出到hdfs中:这是Shell脚本:(注意这个脚本可能有错我临时写的,但思路确定是对的,你们本身调吧哈哈)

ConnectURL=jdbc:mysql://localhost:3306/user_action

UserName=root

PassWord=123456

OutputPath=/hdfs/recommend/user_action/watch_record

TableName= watch_record

Columns=id,uid,mid,timestamp

IfJobCreated =`sqoop job list | grep import_ watch_record`

#检查import_ watch_record这个job是否已经建立 若是未建立则建立

if [ $IfJobCreated = ’’ ] then

sqoop job import_ watch_record /

--create --import /

--connect $ConnectURL/

--username $UserName/

--password $PassWord/

--target-dir $OutputPath/

--m 1/

--table $TableName/

–columns $Columns/

--incremental append/

--check-column id/

--last-value 0

fi

sqoop job --exec import_ watch_record

5、若是watch_record这个表作了大量的分表分库设计怎么办呢?

很简单把上面的shell写个循环就ok了

这样行为数据的导入工做就完成了,下一篇我将分享利用hadoop的map-reduce计算框架分析用户行为数据,最终得出咱们想要的用户偏好表