大数据技术 -- 大数据实战项目:电商推荐系统(一)

目录

第1章 项目体系架构设计

1.1 项目系统架构

1.2 项目数据流程

1.3 数据模型

第2章 工具环境搭建

2.1 MongoDB(单节点)环境配置

2.2 Redis(单节点)环境配置

2.3 Spark(单节点)环境配置

2.4 Zookeeper(单节点)环境配置

2.5 Flume-ng(单节点)环境配置

2.6 Kafka(单节点)环境配置

第3章 创建项目并初始化业务数据

3.1 在IDEA中创建maven项目

3.2 数据加载准备

3.3 数据初始化到MongoDB

第4章 离线推荐服务建设

4.1 离线推荐服务

4.2 离线统计服务

4.3 基于隐语义模型的协同过滤推荐

第5章 实时推荐服务建设

5.1 实时推荐服务

5.2 实时推荐模型和代码框架

5.3 实时推荐算法的实现

5.4 实时系统联调

第6章 冷启动问题处理

第7章 其它形式的离线相似推荐服务

7.1 基于内容的相似推荐

7.2 基于物品的协同过滤相似推荐

第8章 程序部署与运行

8.1 发布项目

8.2 安装前端项目

8.3 安装业务服务器

8.4 Kafka配置与启动

8.5 Flume配置与启动

8.6 部署流式计算服务

8.7 Azkaban调度离线算法

第1章 项目体系架构设计

1.1 项目系统架构

项目以推荐系统建设领域知名的经过修改过的中文亚马逊电商数据集作为依托,以某电商网站真实业务数据架构为基础,构建了符合教学体系的一体化的电商推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、平台部署等多方位的闭环的业务实现。

用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用AngularJS2进行实现,部署在Apache服务上。

综合业务服务主要实现JavaEE层面整体的业务逻辑,通过Spring进行构建,对接业务需求。部署在Tomcat上。

数据存储部分

业务数据库项目采用广泛应用的文档数据库MongDB作为主数据库,主要负责平台业务逻辑数据的存储。

缓存数据库项目采用Redis作为缓存数据库,主要用来支撑实时推荐系统部分对于数据的高速获取需求。

【离线推荐部分】

离线统计服务批处理统计性业务采用Spark Core + Spark SQL进行实现,实现对指标类数据的统计任务。

离线推荐服务离线推荐业务采用Spark Core + Spark MLlib进行实现,采用ALS算法进行实现。

【实时推荐部分】

日志采集服务通过利用Flume-ng对业务平台中用户对于商品的一次评分行为进行采集,实时发送到Kafka集群。

消息缓冲服务项目采用Kafka作为流式数据的缓存组件,接受来自Flume的数据采集请求。并将数据推送到项目的实时推荐系统部分。

实时推荐服务项目采用Spark Streaming作为实时推荐系统,通过接收Kafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到MongoDB数据库。

1.2 项目数据流程

【系统初始化部分】

  1. 通过Spark SQL将系统初始化数据加载到MongoDB中。

【离线推荐部分】

  1. 可以通过Azkaban实现对于离线统计服务以离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行。
  2. 离线统计服务从MongoDB中加载数据,将【商品平均评分统计】、【商品评分个数统计】、【最近商品评分个数统计】三个统计算法进行运行实现,并将计算结果回写到MongoDB中;离线推荐服务从MongoDB中加载数据,通过ALS算法分别将【用户推荐结果矩阵】、【影片相似度矩阵】回写到MongoDB中。

【实时推荐部分】

  1. Flume从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到Kafka中;Kafka在收到这些日志之后,通过kafkaStream程序对获取的日志信息进行过滤处理,获取用户评分数据流【UID|MID|SCORE|TIMESTAMP】,并发送到另外一个Kafka队列;Spark Streaming监听Kafka队列,实时获取Kafka过滤出来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;计算完成之后,将新的推荐结构和MongDB数据库中的推荐结果进行合并。

【业务系统部分】

  1. 推荐结果展示部分,从MongoDB中将离线推荐结果、实时推荐结果、内容推荐结果进行混合,综合给出相对应的数据。
  2. 商品信息查询服务通过对接MongoDB实现对商品信息的查询操作。
  3. 商品评分部分,获取用户通过UI给出的评分动作,后台服务进行数据库记录后,一方面将数据推动到Redis群中,另一方面,通过预设的日志框架输出到Tomcat中的日志中。
  4. 商品标签部分,项目提供用户对商品打标签服务。

1.3 数据模型

  1. Product【商品数据表】

字段名

字段类型

字段描述

字段备注

productId

Int

商品的ID

name

String

商品的名称

categories

String

商品所属类别

每一项用“|”分割

imageUrl

String

商品图片的URL

tags

String

商品的UGC标签

每一项用“|”分割

  1. Rating【用户评分表】

字段名

字段类型

字段描述

字段备注

userId

Int

用户的ID

productId

Int

商品的ID

score

Double

商品的分值

timestamp

Long

评分的时间

  1. Tag【商品标签表】

字段名

字段类型

字段描述

字段备注

userId

Int

用户的ID

productId

Int

商品的ID

tag

String

商品的标签

timestamp

Long

评分的时间

  1. User【用户表】

字段名

字段类型

字段描述

字段备注

userId

Int

用户的ID

username

String

用户名

password

String

用户密码

timestamp

Lon0067

用户创建的时间

  1. RateMoreProductsRecently【最近商品评分个数统计表】

字段名

字段类型

字段描述

字段备注

productId

Int

商品的ID

count

Int

商品的评分数

yearmonth

String

评分的时段

yyyymm

  1. RateMoreProducts【商品评分个数统计表】

字段名

字段类型

字段描述

字段备注

productId

Int

商品的ID

count

Int

商品的评分数

  1. AverageProductsScore【商品平均评分表】

字段名

字段类型

字段描述

字段备注

productId

Int

商品的ID

avg

Double

商品的平均评分

  1. ProductRecs【商品相似性矩阵】

字段名

字段类型

字段描述

字段备注

productId

Int

商品的ID

recs

Array[(productId:Int,score:Double)]

该商品最相似的商品集合

  1. UserRecs【用户商品推荐矩阵】

字段名

字段类型

字段描述

字段备注

userId

Int

用户的ID

recs

Array[(productId:Int,score:Double)]

推荐给该用户的商品集合

  1. StreamRecs【用户实时商品推荐矩阵】

字段名

字段类型

字段描述

字段备注

userId

Int

用户的ID

recs

Array[(productId:Int,score:Double)]

实时推荐给该用户的商品集合

作者有话说:

微信:fromallwealth  可免费获取全文即配置资料

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值