# 基于用户画像的电影推荐系统
**Repository Path**: grx330/MovieRecommendSystem
## Basic Information
- **Project Name**: 基于用户画像的电影推荐系统
- **Description**: 毕业设计:基于用户画像的电影推荐系统的设计与实现
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2024-06-15
- **Last Updated**: 2025-04-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 前言
**如果没有Linux,Java,前端的基础,且没有开发过一个完整的web项目,就不推荐学习本项目了。**
演示视频地址:https://www.bilibili.com/video/BV1LmVie9EJe
前端项目地址:https://gitee.com/grx330/MRSwebsite
# 项目环境

# 启动命令
## 前端
安装依赖包
yarn install
启动
yarn serve
## 虚拟机
关闭防火墙
```bash
sudo firewall-cmd --state
sudo systemctl stop firewalld.service
```
### 1.mongodb
mongodb目录下:
启动:bin/mongod -config ./data/mongodb.conf
连接:bin/mongo
关闭:bin/mongod -shutdown -config ./data/mongodb.conf
### 2.elasticsearch
elasticsearch目录下:
启动:bin/elasticsearch -d
检查:jps
关闭:先jps查pid,再然后 kill pid
### 3.redis
redis目录下:
启动:redis-server ./redis.conf
连接:redis-cli
关闭:redis-cli shutdown
### 4.后端
tomcat目录下:
启动:bin/startup.sh
查看控制台输出:tail -f logs/catalina.out
关闭:bin/shutdown.sh
### 5.zookeeper
zookeeper目录下:
启动:bin/zkServer.sh start
检查:bin/zkServer.sh status
关闭:bin/zkServer.sh stop
### 6.kafka
kafka目录下:
启动kafka之前需要启动zookeeper服务
启动:bin/kafka-server-start.sh -daemon ./config/server.properties
首次启动需要创建两个Topic(recommender和log):
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic recommender
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic log
查看Topic:
bin/kafka-topics.sh --zookeeper localhost:2181 --list
检查:
1.启动一个console生产者:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic recommender
2.启动一个console消费者:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic recommender
关闭:bin/kafka-server-stop.sh
**离线统计和离线推荐代码的自动运行**
### 7.spark
spark目录下:
启动:sbin/start-all.sh
### 8.azkaban
(定时运行一次代码,访问http://localhost:8083/进行设置)
azkaban-solo-server目录下:
启动:bin/start-solo.sh
(账号密码都是azkaban)
关闭:bin/shutdown-solo.sh
**实时推荐代码的自动运行**
### 9.flume
flume目录下:
启动:bin/flume-ng agent -c ./conf/ -f ./conf/log-kafka.properties -n agent
检查:ps -ef | grep flume
kafkastream目录下:
java -cp kafkastream.jar org.example.kafkastream.Application localhost:9092 localhost:2181 log recommender &
检查:ps -ef | grep kafkastream
streaming目录下:
/home/admin/cluster/spark/bin/spark-submit --class org.example.streaming.StreamingRecommender /home/admin/cluster/streaming/streamingrecommender.jar &
检查:ps -ef | grep streamingrecommender.jar
# 环境搭建
## 虚拟机搭建
### 下载VM VirtualBox
### 新建虚拟机
推荐虚拟机CPU > 4core,内存 > 4GB(尽可能大)
推荐centOS 6.9(7也可以,要提高一下虚拟机的配置)


系统安装参考过程去看视频吧
https://www.bilibili.com/video/BV19W4y1w7cM/?p=9
iso镜像文件下载地址
阿里镜像源网站:
https://mirrors.aliyun.com
清华大学镜像源网站:
https://mirrors.tuna.tsinghua.edu.cn/
## 工具环境搭建
用FinalShell远程连接虚拟机:
[解决VirtualBox找不到Host-Only适配器-百度经验 (baidu.com)](https://jingyan.baidu.com/article/60ccbceb62912225cbb1975e.html)
https://www.bilibili.com/video/BV1tb4y1H7Si
### 配置视频教程
接下来看视频结合教案
https://www.bilibili.com/video/BV1oa411H785/?p=2
## 疑问(踩坑)
### 1.jps找不到命令
[(centos7)jps 找不到命令_51CTO博客_centos7 ifconfig命令找不到](https://blog.51cto.com/u_13415677/3727499)

### 2.无法访问虚拟机中的elasticsearch
关闭防火墙
```
sudo firewall-cmd --state
sudo systemctl stop firewalld.service
```
[浏览器访问虚拟机中的ElasticSearch_虚拟机配置elasticsearch访问地址-CSDN博客](https://blog.csdn.net/xi9972/article/details/103980854)

改yml里面的配置
[宿主机无法访问虚拟机中 ElasticSearch服务_windows无法访问虚拟机的elasticsearch-CSDN博客](https://blog.csdn.net/star1210644725/article/details/103903993)

加个转发规则

### 3.教案下载spark的地址用不了

换一个镜像地址吧...
`wget https://archive.apache.org/dist/spark/spark-2.1.1/spark-2.1.1-bin-hadoop2.7.tgz --no-check-certificate`

(spark同样需要关闭防火墙才能被宿主机访问)
### 4.安装azkaban运行./gradlew clean build报错

对网络要求极高(也可能他那边服务器差),换个网多试几次吧...校园网不行就手机热点
命令改成:
```
sudo ./gradlew clean
sudo ./gradlew build installDist -x test
```
如果还不行就试试下面配一下node环境
貌似还需要node环境...(视频未提及)
[linux 安装nodejs 详细教程_linux安装nodejs-CSDN博客](https://blog.csdn.net/qq_42673067/article/details/130401204)
[azkaban-4.0.0安装部署报错_azkaban could not resolve org.nodejs-CSDN博客](https://blog.csdn.net/liuandefeng/article/details/130983335)
### 5.无法访问虚拟机中的azkaban
改azkaban.properties里的内容
```
default.timezone.id=Asia/Shanghai
jetty.port=8083
```
去vbox加一个端口转发规则

记得关掉防火墙,浏览器输入localhost:8083
chrome会提示“此网站无法提供安全连接”,然后打开不了,但是Edge就不会。。
### 6.教案下载zookeeper的地址用不了
`wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz`
[zookeeper 启动时一直报 :Starting zookeeper ... FAILED TO START的解决方案_[root@hadoop03 bin\]# sh zkserver.sh start /usr/bin-CSDN博客](https://blog.csdn.net/qq_48289488/article/details/124398177)
### 7.教案下载flume、kafka的地址用不了
`wget https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.11.0/apache-flume-1.11.0-bin.tar.gz`
`wget https://archive.apache.org/dist/kafka/0.10.2.1/kafka_2.12-0.10.2.1.tgz`
### 8.启动apache
[Centos6和Centos7的服务启动等差别—在cenOS下安装apache出现-bash: /etc/init.d/httpd: 没有那个文件或目录_centos没有那个文件或目录-CSDN博客](https://blog.csdn.net/m0_56346550/article/details/127913269)
启动服务
systemctl start httpd
停止服务
systemctl stop httpd
重启服务(先停止,后启动)
systemctl restart httpd
重新加载(使用新的配置文件)
systemctl reload httpd
显示服务状态
systemctl status httpd
(记得加端口转发给宿主机)
### 9.Tomcat 404问题
[异常SERVLET:org.eclipse.jetty.servlet.ServletHandler$Default404Servlet-25bbf683 - 涛声一笑 - ITeye博客](https://www.iteye.com/blog/lintaozhou-2521157)
### 10.不能访问mongodb
关闭防火墙,在/data/mongodb.conf里面加上:
`bind_ip = 0.0.0.0`
为了不和windows本地的有冲突 改了端口转发

(记得用 bin.mongo 连接数据库)
### 11.数据加载模块一直报错
[None of the configured nodes are available: [{#transport#-1}{oSQMmpMTTHSkppahCmb8yA}{localhost}{127.0.0.1:9300}]]
修改一下配置elasticsearch.yml

network.publish_host写自己虚拟机的ip
参考:[通过9200可访问ElasticSearch,9300访问失败问题_es 9300 请求不了-CSDN博客](https://blog.csdn.net/z327092292/article/details/91973824)
### 12.kafka联调不成功
报错
Exception in thread "main" org.apache.kafka.streams.errors.StreamsException: Could not find any available broker.
改配置:
[kafka 9092端口不通 - 哎哟我去a - 博客园 (cnblogs.com)](https://www.cnblogs.com/hellohero55/p/14860605.html)
### 13.Redis拒绝连接
报错
Exception in task 0.0 in stage 5.0 (TID 5) redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect
加上新的端口转发

### 14.运行flume报错
```
Warning: JAVA_HOME is not set!
Info: Including Hive libraries found via () for Hive access
exec /usr/bin/java -Xmx20m -cp '/home/admin/cluster/flume/conf:/home/admin/cluster/flume/lib/*:/lib/*' -Djava.library.path= org.apache.flume.node.Application -f ./conf/log-kafka.properties -n agent
```
原因是未配置JAVA_HOME环境变量,参考:
[Centos7配置JAVA_HOME_centos7 export java_home-CSDN博客](https://blog.csdn.net/zzpzheng/article/details/73613838)
### 15.tomcat启动后zookeeper无法使用
因为zookeeper也需要使用8080端口,tomcat占用后就不能用了
要更改Tomcat的端口,你需要编辑Tomcat的配置文件`server.xml`。这个文件通常位于Tomcat安装目录的`conf`文件夹内。以下是具体步骤:
1. 打开`server.xml`文件。
2. 在文件中找到以下部分:
```xml
```
3. 将`port="8080"`中的`8080`更改为你想要的端口号,我改为了`8088`:
```xml
```
4. 保存并关闭`server.xml`文件。
5. 重启Tomcat服务器使更改生效。
## 一些启动的命令
关闭防火墙
```
sudo firewall-cmd --state
sudo systemctl stop firewalld.service
```
### 1.mongodb
mongodb目录下
启动:bin/mongod -config ./data/mongodb.conf
连接:bin/mongo
关闭:bin/mongod -shutdown -config ./data/mongodb.conf
### 2.elasticsearch
elasticsearch目录下:
启动:bin/elasticsearch -d
检查:jps
关闭:先jps查pid,再然后 kill pid
### 3.redis
redis目录下:
启动:redis-server ./redis.conf
连接:redis-cli
关闭:redis-cli shutdown
### 4.zookeeper
zookeeper目录下:
启动:bin/zkServer.sh start
检查:bin/zkServer.sh status
关闭:bin/zkServer.sh stop
### 5.kafka
kafka目录下:
启动kafka之前需要启动zookeeper服务
启动:bin/kafka-server-start.sh -daemon ./config/server.properties
创建两个Topic(recommender和log):
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic recommender
查看Topic:
bin/kafka-topics.sh --zookeeper localhost:2181 --list
检查:
1.启动一个console生产者:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic recommender
2.启动一个console消费者:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic recommender
关闭:bin/kafka-server-stop.sh
### 6.apache服务器
启动:systemctl start httpd
检查:systemctl status httpd
停止:systemctl stop httpd
将打包好的前端项目(website-release.tar.gz)部署到apache服务器中具体是将文件夹中有index.html文件的传出到/var/www/html/目录下即可
cd /var/www/html/
sudo mv ~/website-release.tar.gz ./
sudo tar -xf website-release.tar.gz
sudo mv website/website/browser/* ./
部署打包好的后端项目(BusinessServer.war),
放到 tomcat 的 webapp 目录下(/home/admin/tomcat/webapps/ROOT),需要先把原本ROOT里面的东西清空将BusinessServer里面的东西(包含index.jsp)替换进去
### 7.tomcat
tomcat目录下:
启动:bin/startup.sh
浏览器localhost:8080检查
关闭:bin/shutdown.sh
### 8.flume
flume目录下:
启动:bin/flume-ng agent -c ./conf/ -f ./conf/log-kafka.properties -n agent
检查:ps -ef | grep flume
kafkastream目录下:
java -cp kafkastream.jar org.example.kafkastream.Application localhost:9092 localhost:2181 log recommender &
检查:ps -ef | grep kafkastream
streaming目录下
/home/admin/cluster/spark/bin/spark-submit --class org.example.streaming.StreamingRecommender /home/admin/cluster/streaming/streamingrecommender.jar &
检查:ps -ef | grep streamingrecommender.jar
### 9.spark
spark目录下:
启动:sbin/start-all.sh
### 10.azkaban
(一分钟运行一次代码)
azkaban-solo-server目录下:
启动:bin/start-solo.sh
(账号密码都是azkaban)
关闭:bin/shutdown-solo.sh