大数据中日志分析——4、日志分析操作
大数据日志分析相关文章
整体目标
- 通过搭建Discuz获取日志
- 项目需求分析
- 项目架构设计
- 使用Flume实时监控日志
- 使用Kafka接收Flume日志
- 使用Spark Streaming统计日志需求
XAMPP安装
折叠代码块BASH
复制代码
1 | # 在slave1操作 |
折叠代码块SQL
复制代码
1 | -- 修改root用户密码 |
Discuz安装
折叠代码块BASH
复制代码
1 | # 先退出刚刚的root |
Discuz相关操作
添加板块
折叠代码块BASH 复制代码1
2
3
4
5
6
7# 进入管理员后台
# http://slave1ip/admin.php
# 进入论坛,可以添加板块和子版块
# 添加两个板块,大数据和人工智能
# 大数据下添加Hadoop和Spark子版块
# 人工智能添加深度学习和机器学习子版块
# 然后可以随便发一个帖子查看访问日志
折叠代码块BASH 复制代码1
2
3# 日志位置在/opt/lampp/logs/access_log
# 查看实时访问日志
tail -f /opt/lampp/logs/access_logDiscuz一些表的查看
折叠代码块SQL 复制代码1
2
3
4
5
6
7
8
9
10
11
12
13-- 登陆数据库:mysql -u root -p password
-- 查看数据库都有哪些
show databases;
-- 选择数据库
use ultrax;
-- 查看都有什么表
show tables;
-- 设置字符集
set names UTF8;
-- 查看帖子id与标题对应关系表
select tid, subject from pre_forum_post limit 10;
-- 查看板块id与标题对应关系表
select fid, name from pre_forum_forum limit 40;
项目需求分析
也就是分析项目要做什么东西,要实现什么
- 统计指定时间段的热门文章
- 统计指定时间段最受欢迎用户,也就是哪个用户在某时间段访问的最多,可用IP标识用户
- 统计指定时间段不同模块访问量
整体架构设计
知道了要做什么之后,就需要思考如何实现,需要有整体架构
这里会介绍架构原理和每个组件的作用
- Flume:用于高效的收集,聚合和移动大量日志数据。是分布式的,可靠的,可用的服务。
- Kafka:用于构建实时的数据管道和流式应用程序。是高吞吐量的分布式发布订阅的消息系统。
- Spark Streaming:用于实时流式数据处理。是Spark核心API的一个扩展
- MySQL:关系型数据库
Flume与Kafka的概念
Flume与Kafka实现实时日志传输
折叠代码块BASH
复制代码
1 | # 在每一个结点启动zookeeper |
修改Apache访问日志格式
使用Spark Streaming进行统计
流程
- 分析日志格式,提取所需字段
- 分析不同统计需求的关键特征,关于一段时间内用户,板块,文章的统计
- 使用spark streaming窗口函数来统计
- 将统计结果存到数据库
- 结果可视化
项目目录结构
折叠代码块BASH 复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20tree -I ".bloop|.bsp|.metals|.vscode|target|project"
├── build.sbt
├── project
│ └── build.properties
└── src
├── main
│ ├── resources
│ │ ├── access_log.txt 访问日志
│ │ └── log_scala.conf 项目配置文件
│ └── scala
│ ├── biz 业务层
│ │ ├── AccessLogParser.scala 日志解析类
│ │ └── LogAnalysis.scala 日志分析类
│ ├── Run.scala 调度类
│ └── util 工具类
│ └── Utility.scala 配置文件解析类
└── test
└── scala
└── Test.scala 调试类
相关配置
build.sbt添加如下配置折叠代码块 复制代码1
2
3
4
5
6
7
8
9
10
11
12
13// 解决冲突,不需要的类丢弃即可
// https://stackoverflow.com/questions/14791955/assembly-merge-strategy-issues-using-sbt-assembly
assemblyMergeStrategy in assembly := {
case x if x.endsWith("UnusedStubClass.class") => MergeStrategy.discard
case x if x.contains("org/apache/commons/collections") => MergeStrategy.discard
case x if x.contains("javax/inject") => MergeStrategy.discard
case x if x.contains("org/aopalliance") => MergeStrategy.discard
case x if x.endsWith("package-info.class") => MergeStrategy.discard
case x if x.endsWith("git.properties") => MergeStrategy.discard
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}project/assembly.sbt加入可添加fatjar的配置折叠代码块 复制代码1
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0")
~/.sbt/1.0/plugins/plugins.sbt添加可以查看依赖树的插件折叠代码块 复制代码1
addDependencyTreePlugin
编译运行加部署
折叠代码块BASH
复制代码
1 | # 进入到项目根目录进行编译 |
- 本文标题:大数据中日志分析——4、日志分析操作
- 创建时间:2022-03-04 10:45:26
- 本文链接:https://blog.212490197.xyz/article/program/bigdata/log-analysis-operation/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
复制版权信息
v1.5.2