基于SparkStreaming的日志分析项目
基于SparkStreaming实现实时的日志分析,首先基于discuz搭建一个论坛平台,然后将该论坛的日志写入到指定文件,最后通过SparkStreaming实时对日志进行分析。
需求分析
- 统计指定时间段的热门文章
- 统计指定时间段内的最受欢迎的用户(以 ip 为单位)
- 统计指定时间段内的不同模块的访问量
项目架构
代码分析
resources
access_log.txt:日志样例
log_sta.conf :配置文件
scala.com.jmx.analysis
AccessLogParser.scala :日志解析
logAnalysis:日志分析
scala.com.jmx.util
Utility.scala:工具类
scala
Run:驱动程序(main)
具体代码详见github
搭建discuz论坛
安装XAMPP
下载
wget https://www.apachefriends.org/xampp-files/5.6.33/xampp-linux-x64-5.6.33-0-installer.run
安装
# 赋予文件执行权限
chmod u+x xampp-linux-x64-5.6.33-0-installer.run
# 运行安装文件
`./xampp-linux-x64-5.6.33-0-installer.run``
配置环境变量
将以下内容加入到 ~/.bash_profileexport XAMPP=/opt/lampp/
export PATH=$PATH:$XAMPP:$XAMPP/bin
刷新环境变量
source ~/.bash_profile
启动XAMPP
xampp restart
root用户密码和权限修改
#修改root用户密码为123
update mysql.user set password=PASSWORD('123') where user='root';
flush privileges;
#赋予root用户远程登录权限
grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
flush privileges;
安装Discuz
下载discuz
wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
安装
#删除原有的web应用
rm -rf /opt/lampp/htdocs/*
unzip Discuz_X3.2_SC_UTF8.zip –d /opt/lampp/htdocs/
cd /opt/lampp/htdocs/
mv upload/*
#修改目录权限
chmod 777 -R /opt/lampp/htdocs/config/
chmod 777 -R /opt/lampp/htdocs/data/
chmod 777 -R /opt/lampp/htdocs/uc_client/
chmod 777 -R /opt/lampp/htdocs/uc_server/
Discuz基本操作
自定义版块
- 进入discuz后台:http://slave1/admin.php
- 点击顶部的“论坛”菜单
- 按照页面提示创建所需版本,可以创建父子版块
查看访问日志
日志默认地址/opt/lampp/logs/access_log
实时查看日志命令tail –f /opt/lampp/logs/access_log
Discuz帖子/版块存储简介
mysql -uroot -p123 ultrax # 登录ultrax数据库
查看包含帖子id及标题对应关系的表
#tid, subject(文章id、标题)
select tid, subject from pre_forum_post limit 10;
#fid, name(版块id、标题)
select fid, name from pre_forum_forum limit 40;
修改日志格式
找到Apache配置文件
Apache配置文件名称为httpd.conf,所在目录为 /opt/lampp/etc/ ,完整路径为 /opt/lampp/etc/httpd.conf
修改日志格式
关闭通用日志文件的使用CustomLog "logs/access_log" common
启用组合日志文件CustomLog "logs/access_log" combined
重新加载配置文件xampp reload
检查访问日志tail -f /opt/lampp/logs/access_log
Flume与Kafka配置
#agent的名称为a1 |
创建MySQL数据库和所需要的表
创建数据库
CREATE DATABASE
statisticsCHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
创建表:
特定时间段内不同ip的访问次数:client_ip_access
CREATE TABLE client_ip_access (
client_ip text COMMENT ‘客户端ip’,
sum BIGINT ( 20 ) NOT NULL COMMENT ‘访问次数’,
time text NOT NULL COMMENT ‘统计时间’
) ENGINE = INNODB DEFAULT CHARSET = utf8;
特定时间段内不同文章的访问次数:hot_article
CREATE TABLE hot_article (
article_id text COMMENT ‘文章id’,
subject text NOT NULL COMMENT ‘文章标题’,
sum BIGINT ( 20 ) NOT NULL COMMENT ‘访问次数’,
time text NOT NULL COMMENT ‘统计时间’
) ENGINE = INNODB DEFAULT CHARSET = utf8;
特定时间段内不同版块的访问次数:hot_section
CREATE TABLE hot_section (
section_id text COMMENT ‘版块id’,
name text NOT NULL COMMENT ‘版块标题’,
sum BIGINT ( 20 ) NOT NULL COMMENT ‘访问次数’,
time text NOT NULL COMMENT ‘统计时间’
) ENGINE = INNODB DEFAULT CHARSET = utf8;
打包部署存在的问题
问题1
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
解决方式
原因:使用sbt打包的时候导致某些包的重复引用,所以打包之后的META-INF的目录下多出了一些.SF,.DSA,*.RSA文件
解决办法:删除掉多于的.SF,.DSA,*.RSA文件
zip -d log_analysis-1.0-SNAPSHOT.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF
问题2
Exception in thread "main" java.io.FileNotFoundException: File file:/data/spark_data/history/event-log does not exist
解决方式
原因:由于spark的spark-defaults.conf配置文件中配置 eventLog 时指定的路径在本机不存在。
解决办法:创建对应的文件夹,并赋予对应权限sudo mkdir -p /data/spark_data/history/spark-events
sudo mkdir -p /data/spark_data/history/event-log
sudo chmod 777 -R /data
总结
首先,基于discuz搭建了论坛,针对论坛产生的日志,对其进行分析。主要的处理流程为log—>flume—>kafka—>sparkstreaming—>MySQL,最后将处理的结果写入MySQL共报表查询。
公众号『大数据技术与数仓』,回复『资料』领取大数据资料包
- 本文链接:https://jiamaoxiang.top/2019/08/26/基于SparkStreaming的日志分析项目/
- 版权声明:本文为博主原创文章,遵循CC BY-SA 4.0版权协议,转载请附上原文出处链接和本声明
分享