FlinkCommodityRecommendationSystem

Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统)

1. 前言

系统取名为 Recs,灵感源于 Recommendation System。logo 使用在线 logo 网站制作。

作者开发该项目,是为了学习 Flink 以及相关大数据中间件。出于展示目的,使用 Springboot + Vue 开发了配套的 web。

作者有过 python + django + JavaScript 的 web 开发的经历,考虑到项目使用 java 开发,为了技术栈的统一,现学了 Springboot 框架以及 Vue。

本项目借鉴了 ECommerceRecommendSystem 开源学习项目,前端部分借鉴较多,在作者搭建好的框架基础上进行优化。修改了 ui 以及部分 bug,并且新增部分功能。

经过本项目的开发锻炼,作者对大数据相关的技术有了较为系统的理解,收获较大。在开发过程中,遇到过很多问题,但都逐一攻克了。作者的经验是,解决问题最好的办法就是阅读官方文档和积极使用 Google。

最后,相关的技术都是现学现用,知识比较片面,因此本项目存在很多待优化的地方,欢迎大家 issue,一起学习,一起进步。

2. 项目简介

2.1 Recs 系统架构

系统主要工作流程:

  • 用户登录/注册系统。

  • 用户对商品进行评分。

  • 评分数据通过 Kafka 发送到推荐模块的实时推荐任务中。

  • 系统执行实时推荐任务,并且将数据存储到 hbase 的 rating 和 userProduct 表中。实时任务包括:实时 topN 以及 基于用户行为推荐。

  • 实时 topN 将计算结果存储到 hbase 的 onlineHot 表中,基于用户行为推荐将计算结果存储到 hbase 的表 onlineRecommend 中。

  • web 端通过查询 hbase 获取相关模块所需数据并展示结果。

2.2 首页

共有四个模块:

  • 猜你喜欢:基于用户行为推荐,当用户对商品进行评分时,Flink 根据用户历史评分商品,结合 itemCF 计算推荐结果。
  • 热门商品:历史热门商品
  • 好评商品:评分较高的商品
  • 实时热门商品: 使用 Flink 时间滑动窗口,对过去一个小时热门商品进行统计,每 5 分钟滑动一次。

2.3 商品详情

  • 展示商品详细信息

  • 看过该商品的人还看了:基于 itemCF 进行推荐

2.4 登录

3. 模块说明

3.1 推荐模块 (recommendation)

开发环境: IDEA + Maven + git + windows && wsl

软件架构:flink + hbase + kafka + mysql + redis

开发指导: flink 的计算任务都存放在 task 包下,DataLoader 为加载数据任务,OfflineRecommender 为离线推荐任务, OnlineRecommender 为实时推荐任务。以模块为单位阅读代码。

3.1.1 猜你喜欢

实时推荐:

  • 从 redist 中查询用户最近评分商品列表 , redis key 为 “ONLINE_PREFIX_” + userId
  • 从 hbase 表 userProduct 中查询用户历史评分商品列表。
  • 根据用户刚评分的 productId 从 hbase 表 itemCFRecommend 表中查询相关的商品列表
  • 对相关商品列表根据之前查出的最近评分商品列表和历史评分商品列表过滤。
  • 根据最近评分商品与本次商品的相似度以及用户历史评分对推荐商品重新排序。

3.1.2 热门商品

对所有时间用户评分的商品根据评分次数进行逆序排序,选出热门商品。

  • flink 将 hbase rating 表加载到内存中,根据 productId group,并且统计出现次数
  • 根据出现次数逆序排序。

3.1.3 好评商品

根据商品评分均分逆序排序,

3.1.4 实时热门商品

采用 flink timeWindow 对过去一个小时的数据进行排序,选出热门的商品。时间窗口每五分钟滑动一次。

3.1.5 看过该商品的人还看了

基于物品推荐 (itemCF)

3.1.6 数据装载模块

消费 kafka topic 为 rating 的数据,并且将数据存储到 hbase rating 表中,为了保证数据的唯一性rowKey 格式为:

userId_productId_timestamp

3.2 后端 (recommend_backend)

开发环境: IDEA + Maven + git + windows && wsl(ubuntu 20.4)+ postwomen

技术架构: Springboot + hibernate + mysql + hbase

开发指导: Controller 模块是后端的核心,从 restFul api 入手。

项目架构:

3.3 前端 (recommend_front)

开发环境: VScode + nodejs + windows && wsl

技术架构: Vue + typescript + element-ui

4. 开发运行步骤

4.1 环境搭建

  • mysql
  • hbase
  • flink
  • redis
  • kafka
  • zookeeper

4.2 创建数据表

  • mysql

共有两张表,一个是 product 用于存储商品的详细信息,另一个是 user 用于存储用户信息。

建表 sql 脚本在 recommendation/src/main/resources/mysql.sql

  • hbase

    • rating
    • userProduct
    • itemCFRecommend
    • goodProducts
    • historyHotProducts
    • onlineRecommend
    • onlineHot

建表语句在 recommendation/src/main/resources/hbase.txt

4.3 数据入库

商品信息存储在recommendation/src/main/resources/product.csv 文件里,我们运行一个 flink 任务将数据装载到 mysql 中。对应的表是我们之前创建的 product

  • 启动 flink ,运行 recommendation/.../task/DataLoader/DataLoaderTask.java
  • 商品信息存储到 mysql 中

4.4 启动开发环境

  • 执行启动脚本

启动脚本是为了一键启动之前部署的 hbase、kafka、flink、redis、zookeeper 等

为了方便开发,作者写了启动和停止环境的 shell 脚本,在 recommendation/main/resources 目录下,分别为 startAll.sh 和 stopAll.sh

  • 启动 springboot 后端项目
  • 启动 vue 前端
  • 启动实时推荐任务
  • 离线任务定时启动

最后,作者正在经历2020秋招,如果您觉得本项目不错,欢迎给个 star!

【新鲜出炉的个人项目】基于 Flink 的商品推荐系统的更多相关文章

  1. 新鲜出炉的30个精美的 jQuery & CSS3 效果【附演示和教程】

    新鲜出炉的30个精美的 jQuery & CSS3 效果[附演示和教程]   作为最流行的 JavaScript 开发框架,jQuery 在现在的 Web 开发项目中扮演着重要角色,它简化了 ...

  2. 20个新鲜出炉的网站模板【HTML & PSD】

    这里给大家分享20 个新鲜出炉的免费网站模板.这些设计元素将成为你下一个项目的重要素材,可以帮你节省很多的时间.与往常一样,我们经常漫游网络,寻找最好的资源, HTML.CSS 和 PSD 等等,记得 ...

  3. Onsen UI – 新鲜出炉的 PhoneGap 界面框架

    Onsen UI 是一个基于元素自定义的 HTML5 UI 框架,用于构建你的移动前端.这个一个基于 Web 组件的概念的框架,让构建应用程序变得更加轻松.Onsen UI 专门针对 PhoneGap ...

  4. 微信小程序开发视频教程新鲜出炉

    微信小程序开发公测了,可是对于新手来说,不同的框架不同的开发机制,如何快速适应呢?微信小程序开发视频教程新鲜出炉了,从零开始一步一步搭建微信小程序,每个章节都会涉及到不同的知识点,等教程学习完你不但掌 ...

  5. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  6. 23套新鲜出炉的网站和手机界面 PSD 素材

    Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这些套件让他们使用快速和有效的方式复制用户界面.这些类型的工具包提供了一个基本的用户界面元素,用于它们需要制作的网站或软件模型. 在这篇文章 ...

  7. 22套新鲜出炉的 Web & Mobile PSD 用户界面素材

    在这篇文章中,我们展示的是自由和清新的 UI 设计素材套件.这些线框图和 UI 设计工具包让设计师在设计用户界面原型的时候能够非常便利. Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这 ...

  8. 分享25个新鲜出炉的 Photoshop 高级教程

    网络上众多优秀的 Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享25个新鲜出炉的 Photoshop 高级教程,提高你的设计技巧,制作时尚的图片效果.这 ...

  9. PS教程:20个新鲜出炉的 Photoshop 中级教程

    Photoshop 实例教程是提高 Photoshop 技能的最佳学习途径.今天,我向大家分享最新20个 Photoshop 进阶教程,提高你的图片处理技巧,制作时尚的效果.这些教程可以帮助把你的想法 ...

随机推荐

  1. HDU 6787 Chess 2020百度之星 初赛三 T5 题解 dp

    传送门:HDU 6787 Chess Problem Description 你现在有一个棋盘,上面有 n 个格子,格子从左往右,1,-,n 进行标号.你可以在棋盘上放置恰好 m 个传送器,并且对于每 ...

  2. Maven 配置编译版本

    pom.xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</gro ...

  3. Java分层领域模型的DO、DTO、BO、AO、VO、POJO、Query定义

    分层领域模型:    DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象.    DTO( Data Transfer Object):数据传输对象,Servic ...

  4. python2.1 if-else条件语句:

    #案例:存款大于100万,买宝马:小于20万自行车! cunkuan=10#if判断条件,else:不满足if执行其他命令if cunkuan>100: print("可以买宝马,好开 ...

  5. 求求你们不要再用 RSA 私钥加密公钥解密了,这非常不安全!

    最近经常在网上看到有人说巨硬的 CNG(Cryptography Next Generation 即下一代加密技术) 只提供 RSA 公钥加密私钥解密,没有提供 RSA 私钥加密公钥解密,他们要自己封 ...

  6. 002_HyperLedger Fabric安装部署

    上一次我们把HyperLedger Fabric的环境全部搭建好了,下面开始正式的HyperLedger Fabric安装部署 首先需要安装编译工具gcc,用命令yum install -y gcc安 ...

  7. Linux学习笔记之配置网络

    1.打开VMware Workstation虚拟机 2.在VMware下安装虚拟ubunt系统后配置网络,如图所示配置,即可. 3.检查笔记本所使用的网段 ①按 “win + R ”键,并输入“cmd ...

  8. 使用免费证书安装 ipa 到真机

    使用免费证书安装 ipa 密码设置 进入 AppleId 官网 登录个人账号 登录进去之后, 找到 Security, 点击 Generate Password... 锁边输入几个字符, 再点击 Cr ...

  9. 【lhyaaa】2020深圳大湾区比赛总结

    又名花样丢分锦集 首先,我们需要来吐槽一下垃圾szccf,毁我青春 居然没有提醒不能用万能头文件,导致一题爆0,据说还有一些结果不是自己答的 emmm-- 进正题 选择题 对包含n个数的序列进行冒泡排 ...

  10. C#LeetCode刷题之#119-杨辉三角 II(Pascal‘s Triangle II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3690 访问. 给定一个非负索引 k,其中 k ≤ 33,返回杨辉 ...