原创毕设雏形之问卷答题实时分析系统


关联XXXXX话题的问卷调查

持续更新中…

一、项目介绍

本项目分为六个模块,第一个为java语言基于springboot实现的问卷答题模块,具体包含问题的校对统计,echarts,bootstrap,click,jquery等前端模块,第二个为admin管理员界面,用于对题目和答题者信息的管理和数据导入导出,图片上传以及大屏可视化。第三个为scala语言基于spark开发的日志清洗、分类、分析聚合模块。第四个为springboot admin sever系统监控模块用于,实时监控项目底层的JVM,mysql,redis等运行是否正常。第五个为docker部署模块。第六个为内网穿透模块,便于外网访问问卷,进行答题测试。

1、springboot答题模块

主要实现 JavaEE 层面整体的业务逻辑,通过 Spring 进行构建,对接业务需求。部署在 Tomcat 上。具体使用的技术有:spring,springMVC,mybatis,redis等,使用的数据库为:mysql数据库。

​ 用户输入学号、姓名等相关信息即可完成登陆(未注册自动注册),然后进入答题界面参与答题,答题结束后显示成绩,然后引导跳转到大数据实时展示页面。上述这些操作都将被日志文件记录下来,保存在日志文件内。

​ 当有新的数据插入或者更新mysql的时候,本模块的websocket能在100ms内把最新的数据广播给当前左右在线的浏览器,反之如果数据库没有新数据插入,那么短时间内则不会自动广播。

2、scala数据分析模块

​ 基于spark实现,具体使用的技术由,kafka,flume,spark,redis,zookeeper等,使用的数据库为mysql。

​ 首先flume负责采集日志文件中的日志信息,转交给kafka,再由spark程序来消费,清洗、分类、分析聚合后写入数据库。

​ 当有新数据写入mysql的时候,本模块会利用redis引导答题模块用websocket技术实时往当前在线浏览器推送最新数据。从访问到浏览器刷新,整个流程延迟在1-2秒左右。

二、项目说明

1、开发环境

​ 虚拟机版本:centos7

​ 编译器:idea 2019.2

​ 数据库:mysql 5.7

​ 答题模块:见pom.xml文件

​ kafka版本:kafka_2.12-3.0.0.tgz

​ flume版本:apache-flume-1.9.0-bin.tar.gz

​ spark版本:spark-3.0.0-bin-hadoop3.2.tgz

​ zookeeper版本:apache-zookeeper-3.5.7-bin.tar.gz

三、项目运行流程

准备工作:

​ ①导入mysql.sql文件,将数据库和表建好。

​ ②修改两个模块的数据库连接四要素,以及开启redis的连接密码:123等信息。

​ ③将两个模块的代码打包发到linux操作系统。

​ ④启动zookeeper集群和kafka集群

启动项目:

开启redis并查看进程:

redis-server /opt/module/redis-7.0.2/redis.conf

查看进程

ps -ef | grep redis 或者使用ps -aux|grep redis

由于可能linx端口占用8080,关闭占用8080端口的进程

sudo fuser -k 8080/tcp

也可用其他端口

① 进入kafka根目录创建kafka主题(需对中间参数做必要修改)

    bin/kafka-topics.sh --create --bootstrap-server hadoop100:2181 --replication-factor 1 --partitions 1 --topic solvingProblem

注意:若要修改topic,记得整个项目都全部改。

②启动kafka消费数据

    bin/kafka-console-consumer.sh --bootstrap-server hadoop100:9092 --topic solvingProblem

③进入flume根目录启动flume采集日志文件

    bin/flume-ng agent -n a1 -c conf/ -f ./flume.conf

④启动答题模块的springboot项目

在本地运行

    nohup java -jar surveysystem.jar >/root/log/run.log 2>/root/log/error.log &

日志文件保存在/root/log/run.log内,错误日志保存在/root/log/error.log内。若要改路径,记得把flume.conf中的路径也一起改了。

在docker上运行

新建vim Dockerfile

FROM java:8  
VOLUME ~/log  
RUN ln -sf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
RUN echo ‘Asia/Shanghai’  >/etc/timezone  
ADD ./surveysystem-0.0.1-SNAPSHOT.jar  ~/surveysystem.jar  
EXPOSE 8081  
ENTRYPOINT  ["java","-jar","-Duser.timezone=GMT+08","~/surveysystem.jar"]  

创建镜像

docker build -t surveysystem .

运行镜像

docker run -d -p 192.168.169.100:8081:8081 -v /root/log:/root/log -v /etc/localtime:/etc/localtime --name surveyapp surveysystem:latest

日志追踪

docker logs -f surveyapp

⑤进入spark根目录启动spark,对日志文件进行实时分析

    bin/spark-submit --class com.bigworldxld.anli.Solving --master local[*] /root/survey_spark.jar

开启内网穿透工具“39nat”

注册账号

登录www.39nat.com,点击右上角的“开始使用按钮”。如果您还没有登录,这里会弹出登录界面。没有密码可以在登录界面下方点击注册按钮注册。

添加映射

在隧道列表中,内网地址表示您本地的地址,可以是tcp、http、https、dir(本地目录)四种类型。外网地址表示本地映射到公网的地址,可以是http和tcp类型。

下载登录客户端

点击下载与您操作系统对应的客户端,解压后无需安装即可使用

linux:打开终端,进入下载目录执行命令解压

unzip 39nat.zip

得到文件39nat,之后在终端中直接执行此命令

./39nat

执行客户端程序后,按照提示输入账号和密码后即可使用。客户端有做断线自动重连处理,同一个账号密码不能同时登录多个客户端。

假设本地Web开发环境地址是http://192.168.169.100:8080,您可以在添加隧道时,选择外网协议为http,内网协议为http,内网地址192.168.169.100,内网端口8080

项目预览:

​ 当完成了步骤后,其他外网用户可以在浏览器输入39nat客户端生成的https://3229se.39nat.com,即可访问该项目了。


文章作者: 读序
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 读序 !
  目录