转:基于Spark的电影推荐系统(包含爬虫项目、web网站、后台管理系统以及spark推荐系统)
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/u011254180/article/details/80006453
本次項(xiàng)目是基于大數(shù)據(jù)過濾引擎的電影推薦系統(tǒng)–“懂你”電影網(wǎng)站,包含了爬蟲、電影網(wǎng)站(前端和后端)、后臺管理系統(tǒng)以及推薦系統(tǒng)(Spark)。
項(xiàng)目代碼托管于github,大家可以自行下載。
一、爬蟲
開發(fā)環(huán)境: pycharm + python3.6
軟件架構(gòu): mysql + scrapy
運(yùn)行環(huán)境: 本次爬取的內(nèi)容在外網(wǎng),所以需先翻墻后才能成功運(yùn)行。
項(xiàng)目架構(gòu):
二、電影網(wǎng)站
開發(fā)環(huán)境: IntelliJ IDEA + maven + git + linux + powerdesigner
軟件架構(gòu): mysql + mybatis + spring + springmvc
項(xiàng)目描述: 懂你電影推薦網(wǎng)站是一個(gè)基于SSM框架的web項(xiàng)目,類似當(dāng)前比較流行的豆瓣。用戶可以在網(wǎng)站上瀏覽電影信息和查詢電影,并且網(wǎng)站會根據(jù)用戶的瀏覽記錄給用戶進(jìn)行實(shí)時(shí)的電影推薦。現(xiàn)已將網(wǎng)站部署在 http://115.159.204.68 網(wǎng)站上,感興趣的朋友可以自行查看。Git的安裝與IDEA和github的集成可以參考博客。
項(xiàng)目架構(gòu):
網(wǎng)站展示:
三、后臺管理系統(tǒng)
開發(fā)環(huán)境: IntelliJ IDEA + maven + git + linux + powerdesigner
軟件架構(gòu): mysql + mybatis + spring + springmvc + easyui
項(xiàng)目描述: 后臺管理系統(tǒng)主要對用戶信息和電影信息進(jìn)行管理,如添加刪除電影信息和完成用戶信息的完善。其中為了更好地保存電影的圖片信息,搭建了圖片服務(wù)器,關(guān)于圖片服務(wù)器FastDFS的搭建可參考博客。后臺系統(tǒng)也布置在服務(wù)器上,感興趣的朋友可以通過地址 http://115.159.204.68:8080/ 訪問,為大家提供的測試賬號為 test,密碼為88888888。
項(xiàng)目架構(gòu):
網(wǎng)站展示:
四、推薦系統(tǒng)(Spark)
開發(fā)環(huán)境: IntelliJ IDEA + maven + git + linux
軟件架構(gòu): hadoop + zookeeper + flume + kafka + nginx + spark + hive + mysql
項(xiàng)目描述: 通過在電影網(wǎng)站系統(tǒng)埋點(diǎn),獲取到用戶的點(diǎn)擊事件(如用戶喜歡哪部電影或?qū)δ巢侩娪暗脑u分)并將信息傳至推薦系統(tǒng),推薦系統(tǒng)根據(jù)該信息做出相應(yīng)的處理,將推薦結(jié)果存入到mysql數(shù)據(jù)庫中,web前端通過查詢數(shù)據(jù)庫將推薦的電影展示給用戶。推薦流程如下:
項(xiàng)目架構(gòu):
具體步驟:
1.服務(wù)器規(guī)劃(linux鏡像為centos6):
spark1(ip 192.168.13.134),分配8G內(nèi)存,4核
spark2(ip 192.168.13.135),分配6G內(nèi)存,4核
spark3(ip 192.168.13.136),分配6G內(nèi)存,4核
2.電影數(shù)據(jù)集,地址: 本次下載的為1m大小的數(shù)據(jù)集
3.環(huán)境的搭建:
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.數(shù)據(jù)的清洗: (上傳數(shù)據(jù)至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
運(yùn)行代碼 spark-submit –class com.zxl.datacleaner.ETL –total-executor-cores 2 –executor-memory 2g lib/ETL.jar
成功于hive中建表
5.數(shù)據(jù)的加工, 根據(jù)ALS算法對數(shù)據(jù)建立模型(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.建立模型, 根據(jù)RMSE(均方根誤差)選取較好的模型
1)啟動上述的服務(wù)
2)代碼(com.zxl.ml.ModelTraining)打包上傳,建立模型
注:com.zxl.ml.ModelTraining2中代碼訓(xùn)練單個(gè)模型,其中參數(shù) rank=50, iteration = 10, lambda = 0.01
代碼位于 package com.zxl.ml.ModelTraining,打包為 Spark_Movie.jar
運(yùn)行代碼 spark-submit –class com.zxl.ml.ModelTraining lib/Spark_Movie.jar
7.產(chǎn)生推薦結(jié)果
1)啟動上述的服務(wù)
2)代碼(com.zxl.ml.Recommender)打包上傳,產(chǎn)生推薦結(jié)果
8.數(shù)據(jù)入庫, 存儲為所有用戶推薦的電影結(jié)果,mysql中存入的格式為(userid, movieid,rating)
1)啟動上述的服務(wù)
2)代碼(com.zxl.ml.RecommendForAllUsers)打包上傳,數(shù)據(jù)入庫
運(yùn)行代碼 spark-submit –class com.zxl.ml.RecommendForAllUsers –jars lib/mysql-connector-java-5.1.35-bin.jar lib/Spark_Movie.jar
9.實(shí)時(shí)數(shù)據(jù)的發(fā)送
1)安裝nginx,用來接收電影網(wǎng)站上用戶的點(diǎn)擊信息,寫入本地文件
2)安裝flume,實(shí)時(shí)監(jiān)控本地文件,將數(shù)據(jù)發(fā)送至kafka消息隊(duì)列中
10.實(shí)時(shí)數(shù)據(jù)的接收處理 ,如果打包到服務(wù)器運(yùn)行錯(cuò)誤,也可在本地IDEA上運(yùn)行
1)安裝zookeeper
2)安裝kafka,用來接收發(fā)送數(shù)據(jù)
3)啟動上述的服務(wù)
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)運(yùn)行,用于為沒有登錄或新用戶推薦,默認(rèn)推薦觀看最多的5部電影
7)代碼運(yùn)行(需指定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
————————————————
版權(quán)聲明:本文為CSDN博主「xl.zhang」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011254180/article/details/80006453
總結(jié)
以上是生活随笔為你收集整理的转:基于Spark的电影推荐系统(包含爬虫项目、web网站、后台管理系统以及spark推荐系统)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 判断所有图片加载完成
- 下一篇: 第4章操作系统基础第五版Aimin.ra