1.数据分析整体过程
- 把电信用户行为数据集加载到分布式文件系统HDFS中。
- 使用 Scala 语言编写 Spark 程序对 HDFS 中的数据进行用户行为分析,并把分析结果写人
- MySQL, 数据库。
- 使用 Spring MVC 框架开发网页应用,对 MySQL,数据库中的数据进行可视化分析。
- 在网页中以图表形式对分析结果进行可视化呈现。
下面将按照如下四个主要步骤对案例开发过程依次进行介绍。
步骤一:本地数据集上传到 HDFS。
步骤二:在 MySQL 中创建数据库。
步骤三:开发 Spark 程序分析用户行为。
步骤四:使用 Spring MVC 框架进行数据可视化分析。
2.本地数据集上传到 HDFS
本案例所有代码和数据都存放在网盘中
百度网盘链接:https://pan.baidu.com/s/1WoccuMl2Sarr58ImVi2AtQ
提取码:0706
2.1下载数据集
从网盘下载数据集demo.txt到本地
2.2把数据集上传到 HDFS
假设数据集 demo.txt 已经被保存到 Linux 本地文件系统的“~/Downloads”目录下。在
Linux 系统中打开一个终端,并在终端中执行如下Shell 命令,把数据集上传到 HDFS 文件系
统中,输入以下命令:
cd /usr/local/hadoop # 进入Hadoop安装目录
./sbin/start-dfs.sh # 启动Hadoop的HDFS组件
jps
./bin/hdfs dfs -ls / # 查看HDFS文件系统目录下的内容
./bin/hdfs dfs -mkdir /input_spark # 在HDFS的根目录下创建input_spark目录
# 把本地数据集上传到HDFS中
./bin/hdfs dfs -put ~/Downloads/demo.txt /input_spark
# 查看该目录的信息
./bin/hdfs dfs -ls /input_spark
# 查看HDFS文件中的数据
/usr/local/hadoop$ ./bin/hdfs dfs -cat /input_spark/demo.txt
结果
3.在 MySQL 中创建数据库
本案例中,用户行为分析的结果全部会被写人MySQL数据库,因此,需要首先在
中创建相应的数据库、表和视图,主要包括:
- 创建数据库;
- 创建数据汇总表
- 创建数据明细表;
- 创建数据原始明细表;
- 创建区域维表;
- 创建渠道维表;
- 创建请求类型维表;
- 创建五个视图。
3.1启动进入 MySQL Shell 环境
启动mysql服务
service mysql start
进入数据库
mysql -u root -p
3.2创建一个数据库
create database spark_web;# 进入数据库spark_web
use spark_web;
3.3创建一个数据库汇总表
create table sum (
imei varchar(10) default null comment'用户编号',
log_times int(2) default null comment'登陆次数',
online_time int(10) default null comment'在线时长(秒)'
) engine=innodb default charset=utf8;
3.4创建一个数据明细表
create table detail (
imei varchar(10) default null comment'用户编号',
first_login_time varchar(100) default null comment'首次登录时间',
online_time int(10) default null comment'在线时长(秒)'
) engine=innodb default charset=utf8;
3.5创建一个数据原始明细表
create table cleanMap (
imei varchar(10) default null comment'用户编号',
logid varchar(100) default null comment'登录时间',
requestip varchar(11) default null comment'登录IP地址',
areacode varchar(11) default null comment'登录区域',
requesttype varchar(11) default null comment'请求类型',
channelne varchar(11) default null comment'渠道'
)engine=innodb default charset=utf8;
3.6创建一个区域维表
create table t_dim_area (
areacode varchar(11) default null comment'区域编码',
areaname varchar(100) default null comment'区域名称'
)engine=innodb default charset=utf8;
一定要插入数据,否则前后端无法进行数据分析
insert into t_dim_area values('0','浙江省丽水市');
insert into t_dim_area values('1','福建省南平市');
insert into t_dim_area values('2','福建省福州市');
3.7 创建一个渠道维表
create table t_dim_channel (
channelno varchar(11) default null comment'渠道编号',
channelname varchar(100) default null comment'渠道名称'
)engine=innodb default charset=utf8 row_format=dynamic;
insert into t_dim_channel values ('0','手机');
insert into t_dim_channel values ('1','PC');
insert into t_dim_channel values ('2','平板电脑');
3.8创建请求类型维表
create table t_dim_requesttype (
requesttype varchar(11) default null comment'请求类型',
requesttypename varchar(100) default null comment'请求类型名称'
)engine=innodb default charset=utf8 row_format=dynamic;
insert into t_dim_requesttype values ('0','GET方式');
insert into t_dim_requesttype values ('1','POST方式');
3.9创建一个五个视图
3.9.1用户渠道趋势分析
create or replace view v_area_channel as
select b.areaname,c.channelname,count(distinct imei) num
from cleanMap a,t_dim_area b,t_dim_channel c
where a.areacode=b.areacode and a.channelne=c.channelno
group by b.areaname,c.channelname;
3.9.2用户请求类型对比情况
create or replace view v_area_requesttype as
select b.areaname,c.requesttypename,count(distinct imei) num
from cleanMap a,t_dim_area b,t_dim_requesttype c
where a.areacode=b.areacode and a.requesttype=c.requesttype
group by b.areaname,c.requesttypename;
3.9.3用户渠道饼图分析
create or replace view v_channelno as
select b.channelname,count(distinct imei) num
from cleanMap a,t_dim_channel b
where a.channelne=b.channelno
group by b.channelname;
3.9.4用户登录情况分析
create or replace view v_user_login as
select distinct a.imei,a.log_times,b.first_login_time,a.online_time
from sum a,detail b
where a.imei=b.imei;
3.9.5用户详细情况分析
create or replace view v_user_detail as
select distinct a.imei,a.requestip,d.requesttypename,c.first_login_time,
b.log_times,b.online_time,e.areaname,f.channelname
from cleanMap a,sum b,detail c,t_dim_requesttype d,t_dim_area e,t_dim_channel f
where a.imei=b.imei and a.imei=c.imei
and a.requesttype=d.requesttype
and a.areacode=e.areacode and a.channelne=f.channelno;
查看spark_web的表
show tables;
3.10添加MySQL数据库驱动程序JAR包
可以到 MySQL官网下载驱动程序,或者也可以直接访问”,到网盘中下载“mysql-connector-java-5.1.40.tar.gz”文件到本地,如保存到“~/Downloads”目录下
然后执行解压缩命令,并把解压后的 MySQL 数据库驱动程序 JAR 包复制到 Spark 安装目录下,
cd ~/下载
unzip mysql-connector-java-5.1.40.zip
cp ./mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/spark/jars
4.开发Spark程序分析用户行为
4.1新建项目Spark_Web
项目Spark_Web的目录结构如下。
4.2运行Spark_Web项目
idea是2024版,spark是3.4.0版本,Scala是2.12.11版本
pom.xml文件
scalac插件
项目依赖
本次案例使用的软件都是最新版本的,如果使用旧版本会出现不兼容的情况
4..3生成Spark_Web.jar
生成jar包的途径是“~/IdeaProjects/Spark_Web/out/artifacts/Spark_Web_jar/Spark_Web.jar”
4.4使用spark-submit命令运行程序
启动MySQL
service mysql start
mysql -u root -p
执行Spark_Web.jar程序
cd /usr/local/spark
./bin/spark-submit --class "cn.edu.xmu.UserOnlineAnalysis" --driver-class-path :/usr/local/spark/jars/* ~/IdeaProjects/Spark_Web/out/artifacts/Spark_Web_jar/Spark_Web.jar file:///home/hadoop/Downloads/demo.txt
出现全部结束,说明数据导入成功了
执行结束后,在MySQL Shell交互式执行环境中,执行如下SQL命令语句。
show database;
use spark_web;
show tables;
select * from detail;
select * from sum;
select * from cleanMap;
5.使用 Spring MVC框架进行数据可视化分析
5.1新建项目SpringMVC
将网盘的文件下载复制到虚拟机中,用idea打开,更新pom.xml文件即可
项目Spark_Web的目录结构如下。
jdbc连接池
将配置更改成自己本地的数据库用户名和密码
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/spark_web?useSSL=false&characterEncoding=utf-8
jdbc_username=root
jdbc_password=123456
5.2生成应用程序JAR包
如果对代码进行了修改,请重新进行打包
5.3网页应用部署到Tomcat服务器中
进人Tomcat安装目录(即“/usr/local/tomcat"), 再进入conf子目录,打开“server.xml" 文件,修改配置文件。
然后,保存“server.xml”文件,在Linux终端中继续执行如下Shell命令,重新启动Tomcat 服务器:
然后,保存“server.xml”文件,在Linux终端中继续执行如下Shell命令,重新启动Tomcat 服务器:
cd /usr/local/tomcat
./bin/shutdown.sh
./bin/startup.sh
前面已经生成的SpringMVC.war 文件的路径是
“~/ldeaProjects/SpringMVC/out/artifacts/SpringMVcSpringMVC.war”。把“SpringMVC.war”文件复制到 Tomcat 的安装目录的“webapps”目录下(即“usr/local/tomcat/webapps”目录)。如图6-47所示,当把“SpringMVC.war”文件复制到webapps目录下的时候,Tomcat 会自动在该目录下生成文件夹 SpringMVC。实际上,如果后面要修改网页程序,当把 webapps目录下的“SpringMVC.war”文件删除时,Tomcat也会自动删除SpringMVC目录。
打开Linux系统的浏览器,在浏览器输人地址“http:/localhost:9999/charts”。就可以看到最终的数据图表了。
其他资料和源代码请参考厦门大学数据库实验室