Spark Core:Apache日志分析
1、实验描述
∙根据实际业务需求使用spark 完成对Apache格式的日志内容的分析。
∙实验时长:
o45分钟
∙主要步骤:
o启动spark-shell
o自定义日志过滤函数
o日志预处理
o统计关于日志的相关指标
o统计结果展示或保存到本地
2、实验环境
∙虚拟机数量:1
∙系统版本:Centos 7.5
∙Scala版本:2.11.0
∙Spark版本: Apache spark-2.1.1
3、相关技能
∙Spark 常用算子
∙apache日志的格式
∙RDD 常见的操作hadoop与spark的区别与联系
4、知识点
∙使用Scala 开发spark 应用
∙常见的日志格式
∙Spark 日志分析的基本方式
5、实现效果
统计不同页面的访问操作效果如下图:
图 1
6、实验步骤
6.1打开终端,启动spark-shell。
6.1.1启动spark-shell,启动时指定启动模式
1.[zkpk@master ~]$cd
2.[zkpk@master ~]$ cd spark-2.1.1-bin-hadoop2.7/
3.[zkpk@master spark-2.1.1-bin-hadoop2.7]$ bin/spark-shell --master local[2]
6.2加载本地文件,使用textFile方法加载本地数据
1.scala> val logFile = "/home/zkpk/experiment/04/access.log"
2.scala> val logRDD = sc.textFile(logFile)
6.3Apache 日志的一般格式:
6.3.1日志内容从左到右依次是:远程IP地址,客户端记录,浏览者记录,
6.3.2请求的时间,包括三项内容:,日期,时间,时区,服务器收到的请求,包括三项内容:
6.3.2.1METHOD:请求的方法,GET/POST等
6.3.2.2RESOURCE:请求的目标链接地址
6.3.2.3PROTOCOL:HTTP版本号
6.3.3状态代码,表示请求是否成功
6.3.4发送的字节数
6.3.5发出请求时所在的URL
6.3.6客户端的详细信息:操作系统及浏览器等
6.4数据预处理:获取合法的日志数据,使用正则表达式做两件事情,一个是过滤掉非法的日志,一个是解析过滤后的日志来获得需要的数据元组。
6.4.1过滤无法解析的日志记录
1.val LogPatterns= """^(\S+) (\S+) (\S+) \[([\w/]+)([\w:/]+)\s([+\-]\d{4})\] "(\S+) (\S+) (\S+)" (\d{3}) (\d+)""".r
2.def filterWithparse(s: String) = {
3.LogPatterns.findFirstIn(s) match {
4.case Some(LogPatterns (_*)) => true
5.case _ => false
6.}
7.}
6.4.2定义解析日志的函数:在Scala命令行键入如下内容,解析日志记录,得到需要的元组
1.def parseLog(s: String) = {
2.val m = LogPatterns.findAllIn(s)
3.if(m.hasNext){
4.val clientIP = m.group(1).toString
5.val requestDate = m.group(4).toString
6.val requestURL = m.group(8).toString
7.val status = m.group(10).toString
8. (clientIP, requestDate, requestURL, status) } else {
9. ("null", "null", "null", "null")
10.}
11.}
6.4.3解析日志文件
1.scala >val tmp = logRDD.filter(filterWithparse)
2.scala > val logRDDv1 = sc.parallelize(tmp.take(tmp.count().toInt).map(parseLog))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论