# meachine_learning-大数据技术之推荐系统 **Repository Path**: lhx_hao/meachine_learning ## Basic Information - **Project Name**: meachine_learning-大数据技术之推荐系统 - **Description**: 成熟完整的推荐系统 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-08-29 - **Last Updated**: 2022-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # meachine_learning **大数据技术之电影推荐系统** #### 介绍 - 项目以推荐系统建设领域知名的经过修改过的 MovieLens 数据集作为依托,以 - 某科技公司电影网站真实业务数据架构为基础,构建了符合教学体系的一体化的电 - 影推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于 - 内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、 - 平台部署等多方位的闭环的业务实现。 #### 软件架构 软件架构说明 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0117/202122_af466dbe_7666330.jpeg "推荐系统项目架构.jpg") - 用 户 可 视 化 : 主 要 负 责实 现 和 用 户 的 交 互 以 及业 务 数 据 的 展 示 , 主 体采 用 - AngularJS2 进行实现,部署在 Apache 服务上。 - 综合业务服务:主要实现 JavaEE 层面整体的业务逻辑,通过 Spring 进行构建, - 对接业务需求。部署在 Tomcat 上。 - 【数据存储部分】 - 业务数据库:项目采用广泛应用的文档数据库 MongDB 作为主数据库,主要负 - 责平台业务逻辑数据的存储。 - 搜索服务器:项目爱用 ElasticSearch 作为模糊检索服务器,通过利用 ES 强大 - 的匹配查询能力实现基于内容的推荐服务。 - 缓存数据库:项目采用 Redis 作为缓存数据库,主要用来支撑实时推荐系统部 - 分对于数据的高速获取需求。 - 【离线推荐部分】 - 离线统计服务:批处理统计性业务采用 Spark Core + Spark SQL 进行实现,实 - 现对指标类数据的统计任务。 - 离线推荐服务:离线推荐业务采用 Spark Core + Spark MLlib 进行实现,采用 - ALS 算法进行实现。 - 工作调度服务:对于离线推荐部分需要以一定的时间频率对算法进行调度,采 - 用 Azkaban 进行任务的调度。 - 【实时推荐部分】 - 日志采集服务:通过利用 Flume-ng 对业务平台中用户对于电影的一次评分行为 - 进行采集,实时发送到 Kafka 集群。 - 消息缓冲服务:项目采用 Kafka 作为流式数据的缓存组件,接受来自 Flume 的 - 数据采集请求。并将数据推送到项目的实时推荐系统部分。 - 实时推荐服务:项目采用 Spark Streaming 作为实时推荐系统,通过接收 Kafka - 中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更 - 新到 MongoDB 数据库。 #### 项目数据流程 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0117/202339_97e882ed_7666330.jpeg "数据流程图.jpg") - 【系统初始化部分】 - 0. 通过 Spark SQL 将系统初始化数据加载到 MongoDB 和 ElasticSearch 中。 - 【离线推荐部分】 - 1. 通过 Azkaban 实现对于离线统计服务以离线推荐服务的调度,通过设定的运行时间 - 完成对任务的触发执行。 - 2. 离线统计服务从 MongoDB 中加载数据,将【电影平均评分统计】、【电影评分个数 - 统计】、【最近电影评分个数统计】三个统计算法进行运行实现,并将计算结果回 - 写到 MongoDB 中;离线推荐服务从 MongoDB 中加载数据,通过 ALS 算法分别将【用 - 户推荐结果矩阵】、【影片相似度矩阵】回写到 MongoDB 中。 - 【实时推荐部分】 - 3. Flume 从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到 - Kafka 中;Kafka 在收到这些日志之后,通过 kafkaStream 程序对获取的日志信息进行 - 过滤处理,获取用户评分数据流【UID|MID|SCORE|TIMESTAMP】,并发送到另外一 - 个 Kafka 队列;Spark Streaming 监听 Kafka 队列,实时获取 Kafka 过滤出来的用户评 - 分数据流,融合存储在 Redis 中的用户最近评分队列数据,提交给实时推荐算法, - 完成对用户新的推荐结果计算;计算完成之后,将新的推荐结构和 MongDB 数据库 - 中的推荐结果进行合并。 - 【业务系统部分】 - 4. 推荐结果展示部分,从 MongoDB、ElasticSearch 中将离线推荐结果、实时推荐结果、 - 内容推荐结果进行混合,综合给出相对应的数据。 - 5. 电影信息查询服务通过对接 MongoDB 实现对电影信息的查询操作。 - 6. 电影评分部分,获取用户通过 UI 给出的评分动作,后台服务进行数据库记录后,一 - 方面将数据推动到 Redis 群中,另一方面,通过预设的日志框架输出到 Tomcat 中的 - 日志中。 - 7. 项目通过 ElasticSearch 实现对电影的模糊检索。 - 8. 电影标签部分,项目提供用户对电影打标签服务。 - #### 数据模型    #### 工具环境搭建 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)