Giter Site home page Giter Site logo

luckyzxl2016 / movie_recommend Goto Github PK

View Code? Open in Web Editor NEW
2.7K 2.7K 1.0K 56.42 MB

基于Spark的电影推荐系统,包含爬虫项目、web网站、后台管理系统以及spark推荐系统

License: MIT License

Java 97.33% Python 0.25% Scala 2.30% Shell 0.11%
hadoop hive mysql nginx scala scrapy spark-mllib spark-streaming ssm-maven

movie_recommend's Introduction

基于Spark的电影推荐系统

本次项目是基于大数据过滤引擎的电影推荐系统--“懂你”电影网站,包含了爬虫、电影网站(前端和后端)、后台管理系统以及推荐系统(Spark)。

image

一、爬虫

开发环境: pycharm + python3.6

软件架构: mysql + scrapy

运行环境: 本次爬取的内容在外网,所以需先翻墙后才能成功运行。

项目架构:

image

二、电影网站

开发环境: IntelliJ IDEA + maven + git + linux + powerdesigner

软件架构: mysql + mybatis + spring + springmvc

项目描述: 懂你电影推荐网站是一个基于SSM框架的web项目,类似当前比较流行的豆瓣。用户可以在网站上浏览电影信息和查询电影,并且网站会根据用户的浏览记录给用户进行实时的电影推荐。现已将网站部署在 http://115.159.204.68 网站上,感兴趣的朋友可以自行查看。Git的安装与IDEA和github的集成可以参考博客

项目架构:

image

image

三、后台管理系统

开发环境: IntelliJ IDEA + maven + git + linux + powerdesigner

软件架构: mysql + mybatis + spring + springmvc + easyui

项目描述: 后台管理系统主要对用户信息和电影信息进行管理,如添加删除电影信息和完成用户信息的完善。其中为了更好地保存电影的图片信息,搭建了图片服务器,关于图片服务器FastDFS的搭建可参考博客。后台系统也布置在服务器上,感兴趣的朋友可以通过地址 http://115.159.204.68:8080/ 访问,为大家提供的测试账号为 test,密码为88888888。

项目架构:

image

四、推荐系统(Spark)

开发环境: IntelliJ IDEA + maven + git + linux

软件架构: hadoop + zookeeper + flume + kafka + nginx + spark + hive + mysql

项目描述: 通过在电影网站系统埋点,获取到用户的点击事件(如用户喜欢哪部电影或对某部电影的评分)并将信息传至推荐系统,推荐系统根据该信息做出相应的处理,将推荐结果存入到mysql数据库中,web前端通过查询数据库将推荐的电影展示给用户。推荐流程如下:

image

项目架构:

image

具体步骤:

1.服务器规划(linux镜像为centos6):

  • spark1(ip 192.168.13.134),分配8G内存,4核
  • spark2(ip 192.168.13.135),分配6G内存,4核
  • spark3(ip 192.168.13.136),分配6G内存,4核

2.电影数据集,地址 本次下载的为1m大小的数据集

3.环境的搭建:

1)hdfs搭建

  • spark1上搭建namenode,secondary namenode,datanode
  • spark2上搭建datanode
  • spark3上搭建datanode

2)yarn搭建

  • spark1上搭建resourcemanager,nodemanager
  • spark2上搭建nodemanager
  • spark3上搭建nodemanager

3)mysql搭建,在spark2上搭建

4)hive搭建,在spark1上搭建

5)spark集群搭建,搭建standalone模式,spark1为master,其他为worker

4.数据的清洗: (上传数据至hdfs中,hdfs操作

1)启动 hdfs:  [root@spark1 ~]# start-dfs.sh

2)启动 yarn:  [root@spark1 ~]# start-yarn.sh

3)启动 mysql: [root@spark2 ~]# service mysqld start

4)启动 hive:  [root@spark1 ~]# hive --service metastore

5)启动 spark集群: [root@spark1 spark-1.6.1]# ./sbin/start-all.sh

6)代码(com.zxl.datacleaner.ETL)打包上传(spark-sql与hive集成

  • 代码位于 package com.zxl.datacleaner.ETL,打包为 ETL.jar
  • 运行代码 spark-submit --class com.zxl.datacleaner.ETL --total-executor-cores 2 --executor-memory 2g lib/ETL.jar
  • 成功于hive中建表

5.数据的加工, 根据ALS算法对数据建立模型(ALS论文)

1)启动 hdfs:  [root@spark1 ~]# start-dfs.sh

2)启动 yarn:  [root@spark1 ~]# start-yarn.sh

3)启动 mysql: [root@spark2 ~]# service mysqld start

4)启动 hive:  [root@spark1 ~]# hive --service metastore

5)启动 spark集群: [root@spark1 spark-1.6.1]# ./sbin/start-all.sh

6)代码(com.zxl.datacleaner.RatingData)打包上传,测试建立模型

6.建立模型, 根据RMSE(均方根误差)选取较好的模型

1)启动上述的服务

2)代码(com.zxl.ml.ModelTraining)打包上传,建立模型

注:com.zxl.ml.ModelTraining2中代码训练单个模型,其中参数 rank=50, iteration = 10, lambda = 0.01

  • 代码位于 package com.zxl.ml.ModelTraining,打包为 Spark_Movie.jar
  • 运行代码 spark-submit --class com.zxl.ml.ModelTraining lib/Spark_Movie.jar

7.产生推荐结果

1)启动上述的服务

2)代码(com.zxl.ml.Recommender)打包上传,产生推荐结果

8.数据入库, 存储为所有用户推荐的电影结果,mysql中存入的格式为(userid, movieid,rating)

1)启动上述的服务

2)代码(com.zxl.ml.RecommendForAllUsers)打包上传,数据入库

  • 运行代码 spark-submit --class com.zxl.ml.RecommendForAllUsers --jars lib/mysql-connector-java-5.1.35-bin.jar lib/Spark_Movie.jar

9.实时数据的发送

1)安装nginx,用来接收电影网站上用户的点击信息,写入本地文件

2)安装flume,实时监控本地文件,将数据发送至kafka消息队列中

10.实时数据的接收处理 ,如果打包到服务器运行错误,也可在本地IDEA上运行

1)安装zookeeper

2)安装kafka,用来接收发送数据

3)启动上述的服务

4)启动zookeeper:  [root@spark1 soft]# zkServer.sh start

4)启动flume:[root@spark1 flume]# bin/flume-ng agent -c ./conf/ -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console -n a1

5)启动kafka:  [root@spark1 kafka_2.11-0.10.1.0]# bin/kafka-server-start.sh config/server.properties

6)代码(com.zxl.datacleaner.PopularMovies2)运行,用于为没有登录或新用户推荐,默认推荐观看最多的5部电影

7)代码运行(需指定jar包 kafka-clients-0.10.1.0.jar)

  • spark-submit --class com.zxl.streaming.SparkDrStreamALS --total-executor-cores 2 --executor-memory 1g --jars lib/kafka-clients-0.10.1.0.jar lib/Spark_Movie.jar

movie_recommend's People

Contributors

luckyzxl2016 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

movie_recommend's Issues

nginx的使用

项目很赞!博主能详细说一下nginx怎么获取用户点击数据的吗?

sql注入

您好:
我是360代码卫士的工作人员,在我们的开源代码检测项目中发现Movie_Recommend存在sql注入漏洞。
详细信息如下:
在indexController.java文件的showtypesortmovie()中接受了请求中的sort参数并绑定到Selectquery对象中
default
最后调用了SortMoiveBycategory方法,跟进该方法对应的xml
default
由于mybatis中order by 后面的参数如果是用的#,排序将不起效果,所以开发人员用的$,但这样同时也导致了sql注入的存在。

复现:略
修复方法:在java层面上做映射,比如说用户只能输入1-5,然后在代码层面将其映射为字段名,然后再使用${}

可以跑起来

可以跑起来,不过要是能实现在线播放就好了,目前来说,抓取的是一些磁力链信息。boseb.com

怎么运行起来

您好,您这个代码我下载下来了,没有main函数,我也不知道怎么跑?大佬能不能给我这个新手一点建议

项目提问

请问一下有该项目相关视频教程吗?可以分享下吗,谢谢了

赞一个

val jdbcURL = "jdbc:mysql://movie2:3306/recommend?useUnicode=true&characterEncoding=utf-8"
val alsTable = "recommend.alsTab"
val recResultTable = "recommend.similarTab"
val top5Table = "recommend.top5Result"
val userTable= "recommend.user"
val ratingTable= "recommend.rating"

在附件sql中只看到movie的sql没看到这几个

Error:(3, 26) java: 程序包org.csource.common不存在

MoviceManager 启动报错:

Error:(3, 26) java: 程序包org.csource.common不存在
Error:(4, 27) java: 程序包org.csource.fastdfs不存在
Error:(5, 27) java: 程序包org.csource.fastdfs不存在
......

开发环境 Ubuntu16.04 + IDEA + JDK8
升级fastdfs-client版本解决.

<dependency>
  <groupId>net.oschina.zcx7878</groupId>
  <artifactId>fastdfs-client-java</artifactId>
  <version>1.27.0.0</version>
</dependency>

关于网站埋点捕获点击事件的疑问

ZzXxL1994你好,你在项目描述说: 通过在电影网站系统埋点,获取到用户的点击事件(如用户喜欢哪部电影或对某部电影的评分)并将信息传至推荐系统,推荐系统根据该信息做出相应的处理。

nginx.conf配置文件的疑问

nginx.conf文件

log_format my_format '$args';
...
       location = /log.gif {
  	    default_type image/gif;
   	    access_log /opt/movieLog/access.log my_format;
	}

问题1:请问这里匹配的uri是/log.gif是记录用户的什么请求?$args是什么参数?

流处理类SparkDrStreamALS.scala中处理日志的疑问

SparkDrStreamALS.scala

val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)
val messagesDStream = messages.map(_._2).map(line => {
      var rating: UserRating = null
      if (line != null) {
        try {
          val fields = line.split(",")
          if (fields.length == 3) {
            rating = UserRating(fields(0).toInt, fields(1).toInt, fields(2).toDouble)
          }
        } catch {
          case e => e.printStackTrace()
        }
      }
      rating
    })

问题二:按照nginx配置的log_format的$args ,这个变量等于请求行中的参数,日志行的内容类似p=boo&q=foo,请问通过KafkaUtils.createDirectStream后的message RDD是怎样子的?后面使用message.map(_._2).map(line=>{…}应该是取得message的第二个元组作为line,请问是kafka的api自动将“&”符号映射为“,”逗号作为分隔符的吗?或是flume做了转换了吗?但是在flume*.properties未看到相关配置,只看到tail -F /opt/movieLog/access.log

jar包如何打

你好,请问哪些上传到linux的jar包是如何打出来的?我在Eclipse中打jar包的时候总是会出错,比如说打ETL.jar这个jar包。谢谢你。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.